2014-10-07 77 views
-1

背景信息:我有一個類橢圓,它繼承了Shape類中的顏色和繼承自橢圓類的圓類。使用toString重寫和繼承來打印arraylist?

在圓形和橢圓形中,我不得不重寫toString方法並連接一個顯示「圓」或橢圓以及形狀的面積,周長和顏色的字符串。

在我的主文件中,我需要現在打印形狀的整個數組列表「調用每個存儲對象的toString方法。」

我不知道如何告訴它如果它是一個圓形時爲圓形調用toString,在橢圓形時是爲橢圓形形式的toString。

@Override 
public String toString() 
{ 
    return "Ellipse" + " " + super.getColor() + " "+ this.calcArea() + " " + this.calcPerimeter(); 
} 

這是我的橢圓toString重寫方法。

回答

1

多態性是你的朋友。如果一個對象的類型是circle,那麼toString將被調用,動態綁定會爲你做這件事。如果對象的類型是橢圓,則將調用橢圓toString。

換句話說

public Class Shape { 
    @Override 
    public String toString() 
    { 
     return "Shape"; 
    } 
} 

public Class Circle extends Shape { 
    @Override 
    public String toString() 
    { 
     return "Circle"; 
    } 
} 

public Class Ellipse extends Circle { 
    @Override 
    public String toString() 
    { 
     return "Ellipse"; 
    } 
} 

// This is in main 
Shape s1 = new Shape(); 
Shape s2 = new Circle(); 
Shape s3 = new Ellipse(); 
System.out.println(s1); 
System.out.println(s2); 
System.out.println(s3); 

將打印

Shape 
Circle 
Ellipse 
+0

因此,它是爲做一個對通過ArrayList和 的System.out.println(形狀)一樣簡單; (形狀是我的數組列表的名字)? – Exziled 2014-10-07 14:49:33

+0

「*編譯器會爲你做這件事*」它不是編譯器,它將處理它,而是JVM本身在運行時。編譯器只能使用靜態綁定,而這裏發生的是動態綁定(多態)。 – Pshemo 2014-10-07 14:55:32

+0

@Pshemo感謝那個catch更新了它。 – StackFlowed 2014-10-07 14:57:25