在下面的代码中,子类对象调用其getBankName()方法,但将调用父类的私有方法getBankName()。
public class Bank {
private void getBankName() {
System.out.println("Bank");
}
public static void main(String[] args) {
Bank bank = new MyBank();
bank.getBankName();
}
}
class MyBank extends Bank {
public void getBankName() {
System.out.println("MyBank");
}
}
此外,如果我将父级方法的访问说明更改为public,则它可以正常工作(子对象调用其自己的方法并打印'MyBank')。为什么仅由于父方法的访问说明符而使调用受到影响?
不能重写私有方法;它们是完全不同的项目,例如重新声明的(阴影)字段。
[当方法的可见性不是私有的时,编译器使用invokevirtual
指令,该指令负责查找适当的替代并执行它。但是,对于私有方法,编译器使用invokevirtual
(请参阅“注释”),该方法明确不允许覆盖。