【发布时间】:2019-04-19 14:47:59
【问题描述】:
在这段代码中:
public abstract class Bird {
private void fly() {
System.out.println("Bird is flying");
}
public static void main(String[] args) {
Bird bird = new Pelican();
bird.fly();
}
}
class Pelican extends Bird {
protected void fly() {
System.out.println("Pelican is flying");
}
}
请解释为什么这个输出是“Bird is fly”,因为私有成员没有被继承,而且我在 Bird 中有一个 Pelican 实例?
【问题讨论】:
-
您不能覆盖
private方法。出于某种原因,我对这个编译完全感到惊讶。 -
你没有覆盖继承类的 fly 方法。
-
这不是关于我是否覆盖某些东西,而是关于 Pelican 实例如何获取其父级的私有代码...
-
总结我假设的所有 cmets - Bird 引用不会让 Pelican 实例到达他自己的方法 fly(),只是因为 main() 方法放在 Bird-class 私有 Bird-class 方法 fly()被调用。此外,如果父类中的访问修饰符将受到保护,则将覆盖父方法并调用子版本。我说的对吗?
标签: java