【发布时间】:2018-07-27 17:28:49
【问题描述】:
我知道 Doc/Oracle 表明子类不会从超类继承私有成员。
但是在调试程序时,如果我们使用 ctrl F7 和 Ctrl F4 跟踪变量,我们肯定可以看到“私有成员被继承”。这很奇怪。
即使我用空的{} 覆盖默认构造函数,它实际上仍然继承私有成员,尽管私有成员不可访问。
术语和实际工作之间的混淆。
我创建了一个示例,包含三个类:
public class Inheritance {
public static void main(String[] args) {
teacher t1 = new teacher();
t1.setGrd(80);
System.out.println(t1.getGrd());
}
}
public class person {
private int age=90;
public void person(){
}
}
public class teacher extends person {
private int grade;
public void setGrd(int age){
grade=age;
}
public int getGrd(){
return grade;
}
}
追踪时:
【问题讨论】:
-
请发布您的代码。私有成员不被子类继承
-
继承用于 is-a 关联。因此,如果 Fruit 具有私有字段颜色,则香蕉也具有私有字段颜色,因为它是水果。但是从子类无法访问该字段的意义上说,它不是继承的:它无法读取或写入。它只有基类知道。
-
你是说this the doc吗?它确实说“私有修饰符 - 该字段只能在其自己的类中访问。” ,但紧接的下一段是关于如何在子类中访问它:“这意味着它们只能从 Bicycle 类中直接访问。但是,我们仍然需要访问这些值。这可以通过添加公共方法来间接完成获取字段值”
-
"我知道 Doc/Oracle 指出子类不从超类继承私有成员。" 显示确切来源。
-
我发布了代码,以及用于追踪的图片。请看一下。
标签: java debugging inheritance ide private