final
的含义是最终的、不可改变的。总结了一下 final 的一些规则。
C++ 也有final
关键字,在C++11及以后的标准中引入了final
,final关键字用于修饰类、成员函数和虚函数,表示它们是最终版本,不能被继承或重写。
final
修饰类:
当我们使用final
关键字修饰一个类时,表示该类是不可继承的。这意味着其他类无法扩展这个被final
修饰的类。这通常用于确保类的安全性和完整性。final class FinalClass {
// 类的内容
}
// 下面的代码会导致编译错误,无法继承FinalClass类
// class SubClass extends FinalClass {}
在上面的示例中,FinalClass
被声明为final
,因此无法被其他类继承。
2.final
修饰方法:
当我们使用final
关键字修饰一个方法时,表示该方法不可被子类重写。这主要应用在一些核心方法或者是已经实现完善的方法上,以防止子类对其进行修改。
class BaseClass {
// final方法
final void finalMethod() {
// 方法的实现
}
}
class SubClass extends BaseClass {
// 下面的代码会导致编译错误,无法重写finalMethod方法
// void finalMethod() {}
}
在上述示例中,finalMethod
被声明为final
,因此无法在子类中进行重写。
final
修饰变量:
当我们使用final
关键字修饰一个变量时,表示该变量是一个常量,一旦被赋值后就不能再进行修改。这种变量通常被称为"不可变变量"。使用final
修饰变量可以提高程序的可读性和安全性,同时还能提供一定程度的性能优化。class ImmutableClass {
final int constantValue = 10; // 常量
void modifyValue() {
// 下面的代码会导致编译错误,常量无法被修改
// constantValue = 20;
}
}
在上述示例中,constantValue
被声明为final
,因此它的值无法被修改。
final
与继承:
当一个类被声明为final
时,它不能被其他类继承。这是为了防止其他类对该类进行修改或者破坏。同时,final
类的方法默认也是final
的,因此无法被子类修改。final
与性能:
使用final
关键字可以带来一些性能上的优化。由于final
修饰的方法无法被重写,编译器可以进行方法内联优化,减少方法调用的开销。同样,final
修饰的变量在编译时会被直接替换为常量值,避免了变量读取的开销。final
与线程安全:
在多线程环境下,使用final
关键字可以提供一定的线程安全性。当一个对象被声明为final
时,它的状态无法改变,从而避免了多线程并发修改的问题。