關於在Java中鑄造參考變量,我有一些不清楚的地方。在Java中鑄造參考變量
我有兩個類A和B,A是超類B. 的如果我有兩個對象,然後將打印聲明:
A a = new A(); //superclass
B b = new B(); //subclass
System.out.println ((A)b);
那麼究竟是什麼發生時println方法執行?
我知道,由於B是A的子類,允許我進行以下轉換:
A a2 = (A)b;
我還知道,當的println取參考變量作爲參數,則toString()方法(已經創建了對象參數)被調用(隱式地)。這是因爲println()方法正在尋找一個String類型的參數,並且toString()方法將該對象表示爲一個字符串。即使我們不寫toString(),也會隱式地調用該方法。所以,下面的兩個語句是等價的:
System.out.println (b);
System.out.println (b.toString());
所以,我的問題是:是採取什麼樣的隱含動作時,我們有
System.out.println ((A)b);
?
我假設參考變量b的類型自動從B到A的可變仍然應該指向相同的對象改變 - 一個與
B b = new B();
創建,但B的僅僅是類型現在會改變。它是否正確? 另一個問題:即使我已將b的類型更改爲超類的類型,子類中的overriden方法將被調用,而不是超類的方法?
非常感謝。
問候
如果傳遞的參數是String,則不會調用toString()。在其他情況下是的。 – 2009-01-31 04:37:25