2016-03-02 128 views
-4
What is the output of running class Test? 

public class Test { 
public static void main(String[] args) { 
    new Circle9(); 
} 
} 

public abstract class GeometricObject { 
    protected GeometricObject() { 
    System.out.print("A"); 
    } 

    protected GeometricObject(String color, boolean filled) { 
    System.out.print("B"); 
    } 
} 

public class Circle9 extends GeometricObject { 
    /** No-arg constructor */ 
    public Circle9() { 
    this(1.0); 
    System.out.print("C"); 
    } 

    /** Construct circle with a specified radius */ 
    public Circle9(double radius) { 
    this(radius, "white", false); 
    System.out.print("D"); 
    } 

    /** Construct a circle with specified radius, filled, and color */ 
    public Circle9(double radius, String color, boolean filled) { 
    super(color, filled); 
    System.out.print("E"); 
    } 
} 

任何人都可以在一些細節爲什麼這個代碼的輸出是BEDC解釋一下嗎?這是我正在閱讀的一本書的練習題。我不明白。對於我來說,內在是一個很難的話題。需要幫助理解這個代碼的輸出。

+5

我投票關閉這一問題作爲題外話,因爲「解釋我這一切」不是一個具體的問題陳述。通過手動或調試器來瀏覽代碼,瞭解多態性是如何工作的,如何更徹底地閱讀您的書籍,如果在此之後仍然存在一個非常具體的問題,請發佈一個新問題。我們不是在這裏解釋整個主題。 –

回答

0

好吧,讓我們來看看。

首先調用Circle9()

啓動的構造:

/** No-arg constructor */ 
public Circle9() { 
this(1.0); 
System.out.print("C"); 
} 

正如你所看到的構造函數首先調用this(1.0)

這意味着另一個構造被打開,事後我們打印「C」

好的下一個構造函數是:

public Circle9(double radius) { 
this(radius, "white", false); 
System.out.print("D"); 
} 

同樣的事情發生,首先另一個構造函數被調用這一點,然後d打印

下一個調用的構造函數是:

public Circle9(double radius, String color, boolean filled) { 
super(color, filled); 
System.out.print("E"); 
} 

這需要一個超級構造函數。由於Circle9擴展GeometricObject它可以使用GeometricObject功能。所以super(color,filled)電話

protected GeometricObject(String color, boolean filled) { 
System.out.print("B"); 
} 

並打印B,則E從之前的話d,最後ç

輸出應該BEDC

+0

乾杯的朋友。這就是我需要的! –

0

只需按照繩:

new Circle9();
new Circle9(1)那麼print("C")
new Circle9(1, white, false)然後print("D")然後print("C")
new GeometricObject(white, false)然後print("E")然後print("D")然後print("C")
print("B")然後print("E")然後print("D")然後print("C")
「BEDC」