為什麼 Java 中子類沒有繼承父類的私有例項變數?


當類宣告私有例項變數時,在嘗試這樣做時是無法在其他類中訪問這些變數的,編譯時會生成一個錯誤。

但是,如果你繼承了包含該類所有其他成員的私有欄位的類,那麼這些私有變數也會被繼承,並且子類可以使用。

但是,你無法直接訪問它們,如果你這樣做,編譯時會生成一個錯誤。

示例

 演示

class Person{
   private String name;
   public Person(String name){
      this.name = name;
   }
   public void displayPerson() {
      System.out.println("Data of the Person class: ");
      System.out.println("Name: "+this.name);
   }
}
public class Student extends Person {
   public Student(String name){
      super(name);
   }
   public void displayStudent() {
      System.out.println("Data of the Student class: ");
      System.out.println("Name: "+super.name);
   }
   public static void main(String[] args) {
      Student std = new Student("Krishna");
   }
}

編譯時錯誤

Student.java:17: error: name has private access in Person
   System.out.println("Name: "+super.name);
                                    ^
1 error

要訪問父類的私有成員,你需要使用設定器和獲取器方法,並使用子類物件呼叫它們。

示例

 演示

class Person{
   private String name;
   public Person(String name){
      this.name = name;
   }
   public void setName(String name) {
      this.name = name;
   }
   public String getName() {
      return this.name;
   }
   public void displayPerson() {
      System.out.println("Data of the Person class: ");
      System.out.println("Name: "+this.name);
   }
}
public class Student extends Person {
   public Student(String name){
      super(name);
   }
   public void displayStudent() {
      System.out.println("Data of the Student class: ");
   }
   public static void main(String[] args) {
      Student std = new Student("Krishna");
      System.out.println(std.getName());
   }
}

輸出

Krishna

更新時間: 2019 年 9 月 10 日

6K+ 瀏覽

開啟您的職場生涯

完成課程獲取認證

開始
廣告