下面小編就為大家帶來一篇Java成員變數的隱藏(實例講解)。小編覺得蠻不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
一、如果子類別與父類別中有一個相同名稱的成員變量,那麼子類別的成員變數會不會覆蓋父類別的成員變數?我們看下在的範例:
public class A { public int x=10; } public class B extends A { public int x=20; } public class C { public static void main(String[] args) { A a=new B(); System.out.println(a.x); //1 B b=new B(); System.out.println(b.x); //2 System.out.println(((A)b).x); //3 } }
運行C類別的main方法的結果為:
10
20
10
透過結果我們可以看出子類別是不會覆蓋父類別的成員變量,我們eclipse的偵錯工具也能很清楚的看出在物件a中同時存在兩個x的成員變數(其中一個是父類別的),如下圖示:
透過第1個和第3個的結果,可以得到物件對於成員的直接存取是靜態邦定的,官方解釋如下:
在一個類別中,子類別中的成員變數如果和父類別中的成員變數同名,那麼即使他們類型不一樣,只要名字一樣。父類別中的成員變數都會被隱藏。
在子類別中,父類別的成員變數不能被簡單的用引用來存取。而是,必須從父類別的引用獲得父類別被隱藏的成員變量,一般來說,我們不推薦隱藏成員變量,
因為這樣會使程式碼變得難以閱讀。
對於靜態方法與成員變數類似,如下:
public class A { public static void print() { System.out.println("A Static "); } } public class B extends A { public static void print() { System.out.println("B Static "); } } public class C { public static void main(String[] args) { A a=new B(); a.print(); B b=new B(); b.print(); ((A)b).print(); } }
結果如下:
A Static B Static A Static
以上是Java中關於成員變數的隱藏詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!