final关键字详解,网上的解释加上自己的理解:
1.修饰类
final class 类名{
成员变量
}
用final修饰的类,之后是无法被继承的。
2.修饰方法
子类继承父类。用了final的方法是不能被继承,被继承后会报错,如果父类用private修饰,意味着这个方法子类将继承不到,再用相同的函数名和参数就会被识别成新方法,与父类的无关。
否则,没有private,子类按方法名和参数继承到这个方法,就会编译出错了。
public class B extends A {
public static void main(String[] args) {
}
public void getName() {
}
}
class A {
/**
* 因为private修饰,子类中不能继承到此方法,因此,子类中的getName方法是重新定义的、
* 属于子类本身的方法,编译正常
*/
private final void getName() {
}
/* 因为pblic修饰,子类可以继承到此方法,导致重写了父类的final方法,编译出错
public final void getName() {
}
}
3.修饰变量
只能读取该变量的值,不能修改。
注意点:final修饰的String类型或者基本数据类型时,他们在编译器就能当做编译常量被执行,final变量在一定程度上能节约运行效率,而普通的变量需要在执行时通过链接来进行,对比之下可想而知。