final

final +基本数据类型      里面赋的值恒定不变

final + 引用类型    引用对象的地址恒定不变,引用对象本身可以改变

final + 方法         此方法不能被重写

final + 类       此类不能被继承(如String)

声明一个空白final,如果要写构造器,必须在每个构造器中对这个空白final进行创建

package finaldate;

public class FinalOverridingIllusion {
public static void main(String[] args) {
OverridingPrivate2 op2 = new OverridingPrivate2();
op2.f();
op2.g();
OverridingPrivate op = op2;
// op.f();错的
// op.g();错的
WithFinals wf =op2;
// wf.f();错的
// wf.g();错的
}
}
class WithFinals{
private final void f(){//final 加上没有什么意义
System.out.println("WithFianls.f(");
}
private void g(){//并不会被之类重写,子类不能读取到此方法。这个方法在WithFinals外面没法访问
System.out.println("WithFinals.g()");
}
final void x(){}
}
class OverridingPrivate extends WithFinals{
private final void f(){//只是一个方法名和父类中的一个方法名相同的一个方法而已,并没有重写
System.out.println("OverridingPrivate.f(");
}
private void g(){//没有权限去访问父类的方法
System.out.println("OverridingPrivate.g()");
}
// void x(){} 会报错,因为父类的x()被定义为final不能被重写
}
class OverridingPrivate2 extends OverridingPrivate{
public final void f(){//只是一个方法名和父类中的一个方法名相同的一个方法而已,并没有重写
System.out.println("OverridingPrivate2.f(");
}
public void g(){//没有权限去访问父类的方法
System.out.println("OverridingPrivate2.g()");
}
}

posted @ 2018-04-05 17:23  苇小宝  阅读(117)  评论(0编辑  收藏  举报