总结
在Java中,只有非private方法才可以被覆盖;但是还需要密切注意覆盖private方法的现象,虽然编译器不会报错,但是也不会按照我们所期望的来执行。确切地说,在导出类中,对于基类中的private方法,最好采用不同的名字。
示例
public class PrivateOverride{
private void f(){print("private f()";}
public static void main(String[] args){
PrivateOverride po=new Derived();
po.f();
}
}
class Derived extends PrivateOverride{
public void f(){print("public f()";}
}
/* output:
private f()
*/
我们所期望的输出是public f(),但是由于private方法被自动认为是final方法,而且对导出类是屏蔽的。因此,在这种情况下,Dervied类中的f()方法就是一个全新的方法,没有重载基类中的f()方法。
本文探讨了Java中方法覆盖的基本原则,特别强调了private方法不能被覆盖的特点,并通过一个具体示例说明了即使尝试覆盖private方法也不会按预期工作的原因。

1万+

被折叠的 条评论
为什么被折叠?



