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()");
}
}