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 」。