这个想法有些含糊,我需要澄清。
我的问题是使用此代码时:
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说(部分)