为什么 Java 中子类不能继承超类的私有实例变量?
java 8object oriented programmingprogramming更新于 2025/11/15 15:08:17
将类的实例变量声明为私有时,其他类无法访问它们,如果尝试访问,将会产生编译时错误。
但是,如果继承了一个包含私有字段的类,包括该类的所有其他成员,那么私有变量也会被继承并可供子类使用。
但是,您无法直接访问它们,如果这样做,将会产生编译时错误。
示例
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");
}
}
Compile-time error
Student.java:17: error: name has private access in Person
System.out.println("Name: "+super.name);
^
1 error
要访问超类的私有成员,您需要使用 setter 和 getter 方法并使用子类对象调用它们。
示例
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

