2012-12-20 60 views
9

考慮:引用類型和對象類型更改Java

public class X implements Z { 
public String toString() { return "I am X"; } 
public static void main(String[] args) { 
    Y myY = new Y(); 
    X myX = myY; 
    Z myZ = myX; 
    System.out.println(myZ); 
} 
} 
class Y extends X { 
public String toString() { return "I am Y"; } 
} 

interface Z {} 

什麼是MYZ的引用類型,什麼是它引用的對象的類型? A.參考類型爲Z;對象類型爲Z.

B.引用類型爲Y;對象類型爲Y.

C.引用類型爲Z;對象類型爲Y.

D.引用類型爲X;對象類型是Z.

在這種情況下,我知道對象類型肯定是Y,因爲我可以使用.getClass()方法對其進行測試。但我不確定如何檢查參考類型是什麼。我假設它是Z但這個假設是基於直覺而不是邏輯。

任何人都可以詳細說明引用類型可能是什麼,爲什麼?

謝謝。

+0

我會去與C,對象是用新的Y()創建;並且myZ被聲明爲Z –

回答

4

的對象的類型的參考在其聲明的點靜態定義:

Z myZ = ... 

因此,基準的類型是Z,所以「C」應該是正確的答案。

+0

總體上參考類型的含義是什麼?我們爲什麼需要它? –

+2

該引用聲明該對象的接口。如果類型X有方法getA(),getB()和getC()。並且類型Y只有getA()和getB(),然後通過將接口(引用類型)從X更改爲Y,即使對象類型爲X,也只能訪問getA()和getB()。 – NickL

2

的Object用new Y();創建這樣的對象類型Y

myZ被宣佈爲ZZ myZ = ...;),所以引用類型是Z

因此,正確的答案是Ç

0

該對象以Z型爲參考

Z myZ = myX; 

其實本來是爲Y型創建,

Y myY = new Y(); 

因此,ANS顯然是C.

0

我知道那是因爲標記爲真正的一個錯誤答案的混亂;我也遇見過它。事實是,正如他們所說,引用是類型Z,對象類型是Y,所以C是正確的答案。