我已经提出了这个问题:
public class A {
private void a() {
System.out.println("a");
}
public static void main(String[] args) {
A t = new B();
t.a();
}
}
class B extends A {
public void a() {
System.out.println("b");
}
}
打印输出:a
我不太清楚答案。 我知道如果你创建一个子对象并将其传递给父引用。它只运行通过A运行的函数。 但这里的功能是私有的,这是如何工作的?
我知道这不是最重要的。但是如何输出打印“a”?
答案 0 :(得分:-1)
虽然父类和子类都有方法a(),但它不是方法覆盖,因为父类A中的()是私有的。
私有方法在类外是不可见的,甚至在它的子类中也是如此。这里B类不知道父类中存在同名的方法。
因此,当您使用类A的引用调用()时,它将调用类A的方法而不是它的子类B。
如果要将A类中方法a()的修饰符更改为public,protected或default,则可以看到方法覆盖行为。它会打印'b'