首頁  >  文章  >  Java  >  Java中關於成員變數的隱藏詳解

Java中關於成員變數的隱藏詳解

黄舟
黄舟原創
2017-09-21 09:29:481854瀏覽

下面小編就為大家帶來一篇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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn