【发布时间】:2020-09-17 18:45:44
【问题描述】:
在下面的代码中,子类对象调用了它的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 约定是
get方法返回 一个值;而不是void,类型应该是String,你应该是return "Bank"。 -
Java 因为安全和封装问题不支持私有方法覆盖,检查:stackoverflow.com/questions/2000137/…。
-
非常糟糕的设计。超类永远不应该知道子类
-
设计不是我关心的问题,只是想弄清楚为什么会发生。
标签: java inheritance super superclass access-specifier