您的位置:首页 > 编程语言 > Java开发

test7.20

2015-09-26 09:58 447 查看
经过尝试我发现一个规律:如果你想在子类中覆盖父类的同一个函数,那么两个函数都必须是public而且不能是final否则,@Override会报错,因为对于private或者final 已经是父类特有的函数,不向外提供接口。子类根本无法使用它,无需覆盖。   这一题我把OverridePrivate的g()变成public然后在OverridePrivate2的g()可以使用@Override.

{private final void f(){System.out.println("WithFinals.f()");}

private void g(){System.out.println("WithFinals.g()");}

}

class OverridingPrivate extends WithFinals {
private final void f(){System.out.println("OverridingPrivate.f()");}
public void g(){System.out.println("OverridingPrivate.g()");}

}

class OverridingPrivate2 extends OverridingPrivate{
public final void f(){System.out.println("OverridingPrivate2.f()");}
@Override public void g(){System.out.println("OverridingPrivate2.g()");}

}

public class FinalOverridingIllusion {
public static void main(String[] args) {
OverridingPrivate2 op2=new OverridingPrivate2();
op2.f();op2.g();
OverridingPrivate op=op2;
WithFinals fw=op2;

class WithFinals

{private final void f(){System.out.println("WithFinals.f()");}

private void g(){System.out.println("WithFinals.g()");}

}

class OverridingPrivate extends WithFinals {
private final void f(){System.out.println("OverridingPrivate.f()");}
public void g(){System.out.println("OverridingPrivate.g()");}

}

class OverridingPrivate2 extends OverridingPrivate{
public final void f(){System.out.println("OverridingPrivate2.f()");}
@Override public void g(){System.out.println("OverridingPrivate2.g()");}

}

public class FinalOverridingIllusion {
public static void main(String[] args) {
OverridingPrivate2 op2=new OverridingPrivate2();
op2.f();op2.g();
OverridingPrivate op=op2;
WithFinals fw=op2;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Java