Given:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | class X { public void mX() { System.out.println("Xm1"); } } class Y extends X { public void mX() { System.out.println("Xm2"); } public void mY() { System.out.println("Ym"); } } public class Test { public static void main(String[] args) { X xRef = new Y(); Y yRef = (Y)xRef; yRef.mY(); xRef.mX(); } } |
What is the result?
A.
Ym
Xm2
B.
Ym
Xm1
C. Compilation fails
D. A ClassCastException is thrown at runtime
題解
程式第22行,將Y物件實體的參考指派給X型態的變數儲存,由於Y類別繼承X類別,隱含(implicit)式的向上轉型是可以的。
程式第23行,將X型態的變數用顯性(explicit)的方式向下轉型成Y型態,X變數所參考的物件為Y物件,因此這個轉型也是可以的。
再來第24,25行,執行Y物件於第14行的mY方法和第10行mX方法。因此分別印出「Ym」和「Xm2」。
留言