为什么子对象调用具有主方法的超类的私有方法?

问题描述 投票:0回答:1

在下面的代码中,子类对象调用其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')。为什么仅由于父方法的访问说明符而使调用受到影响?

java inheritance super superclass access-specifier
1个回答
0
投票

不能重写私有方法;它们是完全不同的项目,例如重新声明的(阴影)字段。

[当方法的可见性不是私有的时,编译器使用invokevirtual指令,该指令负责查找适当的替代并执行它。但是,对于私有方法,编译器使用invokevirtual(请参阅“注释”),该方法明确不允许覆盖。

© www.soinside.com 2019 - 2024. All rights reserved.