1.final方法的使用原因有两个,1.把方法锁定,以防止任何继承类来修改它的含义,确保在继承中方法行为保持不变,并且不会被覆盖。
final和private关键字:
类中所有的private关键字都是隐式地指定为final,由于无法去取用private的方法,因此也就无法去覆盖他,但是可以对private添加final修饰词,但是并不能给该方法增加任何额外的意义
如果是尝试覆盖一个private的方法,其隐式是包含final的,貌似编译器是可以的,而且编译器也不会给出任何的错误信息:
看一下运行结果,如下所示:
其中公有类型是无法转换成私有类型的;
显示如下操作:
但是公共的public方法即可去进行调用即可:
完整验证代码代码如下:
class withFinals{
private final void f(){
System.out.println("withfinal.f()");
}
private void g(){
System.out.println("without final g()");
}
}
class overridingPrivate extends withFinals{
private final void f(){
System.out.println("overrdingprivate final");
}
private void g(){
System.out.println("overrdingprivate g()");
}
}
class overridingPrivate2 extends withFinals{
public final void f(){
System.out.println("overrdingprivate2 final");
}
public void g(){
System.out.println("overrdingprivate2 g()");
}
}
public class finaloverridingillusion {
public static void main(String[] args){
overridingPrivate2 op2=new overridingPrivate2();
op2.f();//public的可以直接被调用
op2.g();//public的可以直接被调用
// overridingPrivate op=op2;
// op.f();
// op.g();
// overridingPrivate op1=new overridingPrivate();
// op1.f();
// op1.g();
// withFinals wf=op2;
}
}