java中的继承具有令人困惑的输出

时间:2017-05-06 19:43:39

标签: java inheritance

我已经提出了这个问题:

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”?

1 个答案:

答案 0 :(得分:-1)

虽然父类和子类都有方法a(),但它不是方法覆盖,因为父类A中的()是私有的。

私有方法在类外是不可见的,甚至在它的子类中也是如此。这里B类不知道父类中存在同名的方法。

因此,当您使用类A的引用调用()时,它将调用类A的方法而不是它的子类B。

如果要将A类中方法a()的修饰符更改为public,protected或default,则可以看到方法覆盖行为。它会打印'b'