2012-12-06 14 views
4

我有一個超類Shape.Java,它接受某種形狀的顏色和幾個計算不同多邊形面積的子類。我創建了一個主類,打印出用戶想要計算的多邊形的不同選擇。調用Java多態的子類

public static void choices() { 
    System.out.println("What do you want to compute?"); 
    System.out.println("a. Rectangle"); 
    System.out.println("b. Triangle"); 
    System.out.println("c. Trapezoid"); 
} 

我爲此使用了一個開關盒。

case 'a': { 
    System.out.print("Enter width: "); 
    double width = input.nextDouble(); 
    System.out.print("\nEnter height: "); 
    double height = input.nextDouble(); 
     ..... 
} 

問題是,爲什麼我會打電話給我的子類矩形(擴展超形狀)包含將顯示用戶的輸入和計算面積的方法是什麼?它是否正確?

Shape rec = new Rectangle(); 

如果是,當我編譯它,我得到一個錯誤「無法找到符號構造矩形......」

請幫助。

+0

也許你的'Rectangle'構造函數期望寬度和高度作爲參數? – GriffeyDog

回答

3

你正確地做到了。您的未定義符號可能是導入不良或不存在的結果;也許Rectangle沒有編譯,或者你可能沒有Rectangle的公共無參數構造函數。

由於動態調度,當你做

Shape rec = new Rectangle();

解釋器的,在運行時,會看rec,並調用方法上Rectangle,如果你調用中定義的方法在Shape上,然後在Rectangle上重寫。