子类不是继承了超类的所有成员吗?为什么不能覆盖超类的私有成员变量呢?假设子类有自己的私有成员版本,并且能够在Java中覆盖它,这不是很安全吗?
发布于 2020-07-10 01:31:09
在java中,子类不继承私有成员。子类并不知道父类的所有信息
发布于 2020-07-10 00:36:05
您已经从其他信息中获得了一些提示,但这里有一个示例。假设有两个类,Foo和Bar。Bar继承自Foo。下面是每种方法的简单实现:
public class Foo {
private void myPrivateMethod() { System.out.printf("myPrivateMethod()\n"); }
public void myPublicMethod() { System.out.printf("myPublicMethod()\n"); }
}
public class Bar extends Foo {
public void barPublicMethod() {
System.out.printf("This is barPublicMethod()!\n");
myPublicMethod();
myPrivateMethod();
}
public static void main(String[] args) {
System.out.printf("This is main!\n");
Bar bar = new Bar();
bar.barPublicMethod();
}
}如果你试图编译这段代码,你会得到这个错误:
$ javac Foo.java Bar.java && java Bar
Bar.java:6: error: cannot find symbol
myPrivateMethod();
^
symbol: method myPrivateMethod()
location: class Bar
1 error如果删除对myPrivateMethod()的调用,它将正常工作。这就是私有方法的本质。
Bar对Foo的私有方法一无所知。没什么。这意味着你不能覆盖它们,因为Bar甚至不知道它们的存在。这就是私密的意思。
Bar不能对Foo中的私有方法做任何事情。没什么。如果您希望Bar能够覆盖它们,则需要将Foo中的定义更改为protected或public。
https://stackoverflow.com/questions/62819136
复制相似问题