2015-09-22 64 views
-1

喜公共變量我創建一個子類的對象,並嘗試調用子類的變量,但它被稱爲超級類變量都超類和子類具有相同的類變量名 重寫超和子類

在此輸出名稱是「孩子」期待爲「o2.name;」但輸出是「基地」。請清楚解釋我...

+4

您不容忽略vairables名的值。它只是訪問它可以從類「ovrriddingBase」訪問的第一個變量'name'。 – SomeJavaGuy

+0

我正在爲子類創建對象「ovrriddingBase o2 = new ovrriddingChild();」然後我嘗試調用子類變量「名稱」。我期待答案「孩子」,但我有「基地」 –

+1

請張貼代碼片段,而不是截圖。 – dimo414

回答

4

變量不是多態在Java中;他們不會互相推翻。當你在一個子類中創建一個相同名字的變量時,這就是所謂的隱藏。生成的子類現在實際上具有兩個屬性。您可以使用super.var或((SuperClass)this)訪問超類.var不支持變量重寫。var

1

Java不支持變量重載。所以,當你寫:

OverrridingBase o2= new Overridingchild(); 
System.out.println(o2.name); 

JVM將O2(即OverrridingBase)的引用類型,並將打印的OverrridingBase