这个想法有些含糊,我需要澄清。

我的问题是使用此代码时:

public class B {

    private void don() {
        System.out.println("hoho private");
    }
    public static void main(String[] args) {
        B t = new A();
        t.don();
    }
}

class A extends B {
    public void don() {
        System.out.println("hoho public");
    }
}

输出为hoho private

这是因为main函数与don方法在同一类中,还是由于重写?

我已经在书中读过这个想法,当我将main函数放在另一个类中时,出现编译器错误。

最佳答案

您不能覆盖private方法。如果将A转换为B,则不可见。您可以覆盖protected方法,但这不是您在这里所做的(是的,在这里,如果将main移至A,那么您将获得另一种方法。我建议您在打算使用@Override批注时覆盖,

class A extends B {
    @Override
    public void don() { // <-- will not compile if don is private in B.
        System.out.println("hoho public");
    }
}



The Java Tutorials: Predefined Annotation Types说(部分)

10-07 19:00