首頁 > 軟體

證明Java中子類繼承了父類別的private屬性

2019-12-10 09:22:17

針對網上流傳的兩種能與不能的說法,都沒有很強說服力的證據。因此,小編使用Android Studio的Debug模式分析了記憶體變數,發現了子類有父類別變數,但最後找到了java官網最權威的解釋:子類不能繼承父類別的私有屬性。詳細看下面

1

1、父類別Father定義一個private int = 7;的成員變數。

public class Father {

      private int i = 7;

}


2

2、子類Son繼承父類別Father 。

public class Son extends Father {

}


3

3、主程式new一個Father物件和new一個Son物件。

public class MainActivity extends AppCompatActivity {

      @Override  

       protected void onCreate(Bundle savedInstanceState) {

                super.onCreate(savedInstanceState); 

                setContentView(R.layout.activity_main); 

                Father father = new Father(); 

                Son son= new Son();

       }

}


4

使用Debug模式觀察範例化結果。可以看到Son裡維護了一個i變數。然而,這並不能證明子類繼承了父類別私有屬性。


5

因此子類直接操作是不可以的,既然是父類別的私有成員,那麼就可以通過父類別方法操作,下面在父類別定義了get,set方法。

public class Father {

   private int i = 7;

   public int getI() { 

       return i; 

    }

   public void setI(int i) {

       this.i = i;

   }

}


6

在主程式中通過get()拿到這個成員變數的值,並列印,如下圖。


7

最後附上java官方文件的解釋:Private Members in a SuperclassA subclass does not inherit the?private?members of its parent class. However, if the superclass has public or protected methods for accessing its private fields, these can also be used by the subclass.A nested class has access to all the private members of its encl
osing class—both fields and methods. Therefore, a public or protected nested class inherited by a subclass has indirect access to all of the private members of the superclass.這段話第一句就直接了當說明了子類不能繼承父類別的私有成員。因此關於能不能繼承,若還有疑問,請到java官網查詢相關文件。
ss has indirect access to all of the private members of the superclass.這段話第一句就直接了當說明了子類不能繼承父類別的私有成員。因此關於能不能繼承,若還有疑問,請到java官網查詢相關文件。

IT145.com E-mail:sddin#qq.com