2011-10-11 47 views
2

我有這個很長的練習,並且在每個子類中出現了交叉問題。 這個問題說,我不知道我寫作時犯了什麼錯誤。 如果你可以檢查4個toString方法,我會大大apprecaited。toString in subClasses不能重寫抽象toString,Java

代碼在這裏:http://paste.org/pastebin/view/39488 我知道我應該在這裏通過代碼,但它很長,我不能很好地組織它。

toString() in Shape cannot override toString() in java.lang.Object; attempting to use incompatible return type

toString() in Square cannot override toString() in java.lang.Object; attempting to use incompatible return type `

toString() in Sphere cannot override toString() in java.lang.Object; attempting to use incompatible return type

toString() in Cube cannot override toString() in java.lang.Object; attempting to use incompatible return type

感謝

回答

4

您需要將函數的返回類型更改爲String,並返回文本,而不是將其寫入System.out的。

public String toString() { 
    return "(" + super.getX() + ", " + 
    super.getY() +") " + "side: " + super.getDimension1(); 
} 

編輯:如果你想有一個對象,直接以文本形式輸出到System.out的方法,你需要把它比toString()別的東西。這是因爲toString()是屬於所有Java類自動擴展的java.lang.Object的方法。

+0

我只是這樣做的,但是當我使用隨機方法打印輸出之前,我意識到這個問題需要打印到字符串 –

+0

。調用'toString()'應該沒有輸出。嘗試更新您的'displayShapeInfo()',以便代替'shapeArray [i] .toString();'調用'System.out.println(shapeArray [i] .toString());'' – Kaivosukeltaja

4

的toString()的返回String沒有void

// false 
public abstract void toString(); 

// right 
public abstract String toString();  

注意:您不應該在toString()方法中打印(System.out)。您應該返回對象的String表示形式。

+0

有沒有辦法可以返回System.out?因爲我認爲我從一開始就犯了一個錯誤,這會讓我重新編寫整個程序:S –

+0

返回System.out沒有意義。 toString()必須返回一個String。 – MasterCassim

0

因爲您嘗試用void返回類型覆蓋它。 toString應該返回一個String。

0

它應該返回一個字符串,而不是void。

public abstract String toString() 
0

toString()Object類中實現,每個類都擴展它。這個方法在每個類中,我們不能有兩個具有相同簽名但返回類型不同的方法。 由於toString()已經與返回類型String那裏,我們不能再有一個toString()與任何其他返回類型。