为什么子对象调用具有 main 方法的 super class 的私有方法?

Why does a child object call private method of the super class having main method?

在下面的代码中,子对象 class 调用了它的 getBankName() 方法,但是调用了父对象 class 的私有方法 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 instruction, which is responsible for finding the appropriate override and executing it. However, for a private method, the compiler uses invokespecial(参见 "Notes"),它明确不允许覆盖。