《从C/C++到Java入门指南》- 25.final 关键字
final 关键字
final 变量
final
变量可以理解为C++中的const
,变量一经定义无法修改。
public class Main {
public static void main(String args[]) {
final double PI = 3.1415926;
System.out.println(PI);
// PI = 3.14; // 尝试修改会报错
}
}
final 方法
一个定义为final
的方法可以防止子类修改该方法,之前提到过private
关键字,也是同理。private
关键字修饰的方法相当于隐式的将方法指定为了final
。所以一个方法使用final
修饰就没有必要再使用private
。
class Father {
public final void turnOnTheTV() {
System.out.println("老登打开了电视");
}
}
class Child extends Father {
public final void turnOnTheTV() {
System.out.println("小子也想打开电视");
}
}
public class Main {
public static void main(String args[]) {
var child = new Child();
child.turnOnTheTV();
}
}
可以看出,在父类中定义了final
修饰的方法不允许子类进行更改,上述代码会进行报错。
final 类
被定义为final
的类不能被继承。
final class Father {
public final void turnOnTheTV() {
System.out.println("老登打开了电视");
}
}
class Child extends Father {
}
public class Main {
public static void main(String args[]) {
// Child child = new Child();
}
}
如果实例化一个继承自final
父类的子类的对象,会报错。
例如,java.lang.Math
和java.lang.String
是两个final
修饰的类,如果他们出现在extends
右侧会发生编译器报错。
class Child extends java.lang.Math {
}
public class Main {
public static void main(String args[]) {
}
}