在超類A和子類B中,我分別將變量abc分別設置爲10和20,並在子類中重寫一個方法callme()。爲什麼java ref vars根據實際對象調用方法,因爲變量基於ref變量類型?
,如果我做
A a = new B();
B b = B(new A());
然後如果我寫
a.callme() -> calls B's method
b.callme() -> calls A's method.
這是因爲方法是基於實際的對象調用。
,如果我做
str = a.abc; // will print 10 , based upon ref var type A
str = b.abc; // will print 20 , based upon ref var type B
爲什麼這種差異?爲什麼不能根據實際對象訪問方法和變量?
感謝
一些來自甲骨文的Java教程]隱藏字段說明(http://download.oracle.com/javase/tutorial/java/IandI/hidevariables.html) –
,我知道這一點。子類實例變量隱藏具有相同名稱的超類變量。 –
我想我不能清楚地問清楚,我知道這些字段是隱藏在子類字段中的。這是一個合理的答案,也是正確的。我想問問爲什麼基於對象ref變量類型和實際對象類型調用方法和字段?這與某些方法和領域將如何存儲在內存中有關嗎?任何人都可以解釋嗎? –