Given:
public class X implements Z {
public String toString() {
return "X ";
}
public static void main(String[] args) {
Y myY = new Y();
X myX = myY;
Z myZ = myX;
System.out.print(myX);
System.out.print((Y) myX);
System.out.print(myZ);
}
}
class Y extends X {
public String toString() {
return "Y ";
}
}
interface Z {
public String toString();
}
What is the output?
A.
X X X
B.
X Y X
C.
Y Y X
D.
Y Y Y
題解
print方法在傳入物件的時候,會去呼叫物件的toString來取得字串值。由於toString是物件方法,因此只需注意物件實體是哪個就好,多型型態不用去管。
程式執行完第10行後,myY變數所參考到的物件是Y物件,myX變數所參考到的物件是Y物件,myZ變數所參考到的物件也是Y物件,這三個Y物件都是同一個物件。第11行之後的輸出,會去執行第19行Y類別內的toString物件方法,所以每個都會輸出「Y 」。