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;
}
}
{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对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树
- [原创]java局域网聊天系统