2014-05-04 83 views
0

我創建一個程序可以使用,但我想打印從toString方法字符串直接使用System.our.println(ClassName.toString()),能虛空中toString方法

相反,我想只是編寫ClassName.toString();並打印輸出。

+0

爲什麼不把它返回一個字符串,但不將它分配給一個變量? – AntonH

+2

'寫入ClassName.toString();並打印輸出。「這就是你寫的代碼所做的。 –

+0

爲什麼使用'toString()'這個?只需編寫一個單獨的方法'ClassName.print()'或者等價物。 –

回答

1

沒有,因爲如果你想調用toString方法一樣ClassName.toString(),這意味着要在ClassName類來創建一個static toString()方法,意味着你hiding的toString實例方法類的Object靜態你的類的方法,但Java規則說你不能用靜態方法隱藏實例方法。

Java規範參考:jls 8.4.8.2. Hiding (by Class Methods)

它是一個編譯時間錯誤,如果一個靜態方法隱藏一個實例方法。

0

toString()方法是Object類中可用的方法。

java中的任何類如果它沒有擴展任何父類,那麼它將在內部將Object類作爲父類。

toString()方法是在對象類的非最終

所以這意味着我們可以重寫toString()方法中的任何亞類。

如果被重寫的方法的內置類型和它的自定義對象應該是相同或父類型的,返回類型應該相同。

所以在我們的案例toString()其返回類型是字符串,因此沒有人可以替換返回類型的字符串。

因此改變它會給編譯時錯誤。

這樣就實現你的情況,你可以在最壞的情況下

@Override 
    public String toString() { 
    System.out.println("your string"); 
     return super.toString(); 
    } 

下面做的,使用這個類的對象調用此方法,如果類名稱是A

然後

A a = new A(); 
a.toString(); 

將使用其主體自動在控制檯上打印內容。

0

我覺得其他答案已涵蓋「不這樣做」,但這是我的「嘗試這個,而不是」。但是,如果你只是想完成打印toString()輸出的更簡潔的方式,你可以做這樣的事情,而不是:

public class PrintMe { 
    private String data = "Just an example"; 

    @Override 
    public String toString() { 
     return data; 
    } 

    public void print() { 
     System.out.println(toString()); 
    } 

    public static void main(String[] args) { 
     PrintMe p = new PrintMe(); 
     p.print(); 
    } 
} 

輸出:Just an example