Java-子類沒有繼承父類的私有變量和私有方法


  在Java子類有沒有繼承父類的私有變量?關於這個問題在網上找了很久,也沒有一個明確的答案。於是綜合大家的觀點,自己總結了一下。 
   
  官方文檔的解釋:“A 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.”。原文地址:Inheritance 
  那么問題來了。之前在做Java實驗時,為什么Manger類能使用Employee的私有屬性呢? 
  我找了一下答案: 
  觀點一: 
  “父類中的公有方法和域(屬性),在類繼承中將會被子類繼承,但是私有的將不能被繼承。那么在繼承中子類如何才能繼承到父類的私有域呢?答案是:在子類的構造方法中通過super()方法調用父類的構造方法。”參考:Java中子類繼承了父類的私有屬性及方法嗎?、 
  寫了測試代碼體會了一下:

public class Father { private int a; public Father() { } public Father(int a) { this.a = a; } public int getA() { return this.a; } } public class Children extends Father { int b; public Children() { } public Children(int a,int b) { //this.a = a; super(a); this.b = b; } } public class Main { public static void main(String[] args) { Children child1 = new Children(13,35); System.out.println(child1.b+" "+child1.getA()); } }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42

  觀點二: 
  “父類的任何成員變量都是會被子類繼承下去的。實際上,private,public,protected和繼承沒有關系,他們對成員函數和變量的限制只是在成員的可見性上。”參考:私有的成員能被子類繼承嗎? 
   
  觀點三: 
  “父類的private變量,也會被繼承並且初始化在子類父對象中,只不過對外不可見。”。他這個觀點的提出是從內存上分析的,值得借鑒。參考:JAVA 繼承 父類子類 內存分配 
   
  我的總結: 
  從繼承的概念來說,private和final不被繼承。Java官方文檔上是這么說的。 
  從內存的角度來說,父類的一切都被繼承(從父類構造方法被調用就知道了,因為new一個對象,就會調用構造方法,子類被new的時候就會調用父類的構造方法,所以從內存的角度來說,子類擁有一個完整的父類)。子類對象所引用的內存有父類變量的一份拷貝。 
  如圖所示,父類為Person類,子類為Student類。首先明確子類不能繼承父類的構造方法。這就是為什么子類的默認的構造方法會自動調用父類的默認的構造方法。 
  在子類的構造方法中通過super()方法調用父類的構造方法。也就是,在構造子類的同時,為子類構造出跟父類相同的域。如此就在子類的對象中,也擁有了父類聲明的域了。 
  這里寫圖片描述


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM