JAVA成員變數的隱藏

來源:互聯網
上載者:User

標籤:.com   ips   簡單的   pre   成員   clip   color   閱讀   有一個   

一、如果子類與父類中有一個相同名稱的成員變數,那麼子類的成員變數會不會覆蓋父類的成員變數?我們看下在的例子:

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成員變數的隱藏

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.