我想確保我對靜態多態性的理解是正確的請看下面的代碼class a { int x=0; }class b extends a { int x=4; } public class main4 { public static void main(String[] args) { a f = new b(); System.out.println(f.x); b ff = new b(); System.out.println(ff.x); }}輸出是04發生這種情況是因為編譯器查看引用的聲明類型并據此確定在編譯時打印哪個 x 嗎?(f 被聲明為類型 a,編譯器查看 fx 并決定它意味著 ax)??&如果是這樣,這稱為靜態多態性或隱藏還是什么?提前致謝
1 回答

慕姐8265434
TA貢獻1813條經驗 獲得超2個贊
多態性就像通過鑰匙孔看對象。您看不到整個對象,而只看到它的一部分,它對應于您已將對象的引用分配給的變量類型。
該對象可以被視為不同的“形狀/形式” - 這取決于您正在查看的鑰匙孔。但它仍然是計算機內存中的同一個對象。您可以看到的形式取決于您將對象分配給的變量類型。
多態性是看到同一對象的多種形式。
如果您有對象創建者-當您將此對象分配給 type 的變量時,new b()
您會將其視為類代表。當您將它分配給 type 的變量時,您會把它看作一個類代表。但它仍然是同一個對象。并且......你可以在變量之間轉換它:b
b
a
a
f = (a)ff;
你會發現同一對象突然被視為a
類的代表(包括x
屬于該類的字段的可見性a
)。
添加回答
舉報
0/150
提交
取消