这个想法有些含糊不清,我需要一些澄清。
我的问题是使用这段代码时:
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
to B
. You can覆盖一个protected
方法,但这不是你在这里所做的(是的,如果你移动你的main
to A
那么你会得到另一种方法。我会推荐@Override
当您打算覆盖时注释,
class A extends B {
@Override
public void don() { // <-- will not compile if don is private in B.
System.out.println("hoho public");
}
}
在这种情况下,为什么编译器不提供使用错误t.don()
这是private
?
Java 教程:预定义注释类型说(部分)
虽然重写方法时不需要使用此注释,但它有助于防止错误。如果一个方法标记为@Override
如果无法正确重写其超类之一中的方法,编译器会生成错误。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)