2012-01-19 82 views
0

我有兩個類:一個類實例化,術語的toString

import android.cla; 
public class CW { 

public static void main(String [] args){ 
    System.out.println(new cla()); 
} 
} 

public class Cl { 
    @Override 
    public String toString(){ 
     return "LOL"; 
    } 
} 

在第一類中我打電話的對象toString()方法,它一直重寫並打印到安慰。它顯然返回「大聲笑」;

我有兩個問題:

  • 是否有可能同時沒有覆蓋的對象toString()方法實例像這樣(new cla())返回的數據;和

  • 什麼是適當的期限實例類像這樣(new cla()),這還沒有類似的聲明:Object l = new cla()

感謝。請按正確的條款糾正我。

回答

3

1 - 不是。 '構造函數'是類中的一個特殊方法,它總是返回類的對象實例。構造函數的要點是返回對象。所以不,它不能返回任何其他東西。

1A - 這System.out.println調用toString方法的原因是因爲你要求它打印出該對象到屏幕上,和toString方法是通過println作者選擇的方法(和一般的Java語言)給出對象的字符串表示。

2 - 這種寫作方式並不真正叫做什麼。這只是一個表達式,您將其作爲'實際參數'傳遞給println方法。確實,這是一個表達式,用於實例化一個新對象,但它與println("a string")沒有什麼不同。如果你真的想,你可以稱它爲匿名對象。

2a - (舊的答案,實際上並沒有回答你的問題,但我會保留在這裏)這就是所謂的「使用派生參考†少於一個班級」。請注意,您只能調用引用類型的方法,因此如果您向Cl課程中添加了其他方法,則無法從Object引用中調用它們。看看Liskov substitution principle

†'少派生'或'超類'或'超類'或'更普遍類別'等...