一、final方法
被定义为final的方法不能被重写。将方法定义为final类型可以防止子类修改该类的定义与实现方式,同时定义为final的方法的执行效率要高于非final方法。在修饰权限中的private修饰符,如果一个父类的某个方法被设置为private修饰符,子类将无法访问该方法,自然无法覆盖该方法,所以一个定义为private的方法隐式被指定为final类型。
但是在父类中被定义为private final 的方法有事可以被子类覆盖,示例如下:
class Parents{
private final void doit() {
System.out.println("父类.doit()");
}
final void doit2() {
System.out.println("父类.doit2()");
}
public void doit3() {
System.out.println("父类.doit3()");
}
}
class Sub extends Parents{
public final void doit() {
//在子类中定义一个doit()方法
System.out.println("子类.doit()");
}
//final void doit2() {
//final方法不能覆盖
// System.out.println("子类.doit2()");
//}
public void doit3() {
System.out.println("子类.doit3()");
}
}
public class FinalMethod {
public static void main(String args[]) {
Sub s= new Sub();//实例化
s.doit(); //调用doit()方法
Parents p = s; //指向向上转型
//p.doit(); //不能调用private方法
p.doit2();
p.doit3();
}
}
/*输出结果如下:
子类.doit()
父类.doit2()
子类.doit3()
*/
二、final类
定义为final的类不能被继承,final类的语法如下:
final 类名{}
如果将某个类设置为final形式,则类中的所有方法都被隐式设置为final形式,但是final类中的成员变量可以被定义为final或非final形式,示例如下:
final class FinalClass{
int a = 3;
void doit() {
}
public static void main(String agrs[]) {
FinalClass f = new FinalClass();
f.a++;
System.out.println(f.a);
}
}
/*输出结果如下:
4
*/