程序如下:
class WithFinals{
private final void f() {print("WithFianls.f()");}
private final vodi g() {print("WithFinals.g()");}
}
class OverridingPrivate extends WithFinals{
private final void f(){print("OverridingPrivate.f()");}
private void g(){print("OverridingPrivate.g()");}
}
class OverridingPrivate2 extends OverridingPrivate{
private final void f(){print("OverridingPrivate2.f()");}
private void g(){print("OverridingPrivate2.g()");}
}
public class test{
public static void main(String[] args){
OverridingPrivate2 op2=new OverridingPrivate2();
op2.f();
op2.g();
//可以这么向上转型
OverridingPrivate op=op2;
//但是不能这么调用方法
//!op.f();
//!op.f();
WithFinal wf=op2;
//!wf.f();
//!wf.g();
}
}
WHY: 覆盖 只有在某方法是基类的借口的一部分时才会出现。即,必须能将一个对象向上转型为它的基本类型并调用相同的方法。如果某方法为private,它就不是基类的借口的一部分。它仅是隐藏在类中的程序代码。