為什麼 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
廣告
資料結構
網路技術
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C 語言程式設計
C++
C#
MongoDB
MySQL
JavaScript
PHP