final类的唯一核心特点:不能被继承。
定义语法非常简单:
final class 类名 {// 成员变量、成员方法
}
实操:final类不能被继承
先定义一个标准的 final 类:
final class Bank {public void showRule() {System.out.println("基础规则,不可随意修改");}
}
尝试继承这个类:
// 编译直接报错!
class SmallBank extends Bank {}
报错原因:Bank 是 final 类,无法被继承。
final 类最核心的作用:锁死类结构,禁止扩展。
final类的常见误区
误区1:final类不能创建对象
final类只是不能被继承,可以正常实例化、正常调用方法。
final class Bank {public void showRule() {System.out.println("基础规则,不可随意修改");}
}public class Main {public static void main(String[] args) {Bank bank = new Bank(); // 正常创建对象bank.showRule(); // 正常调用方法}
}
误区2:final类的方法不能使用
final类中所有方法、属性都可以正常使用,只是无法被重写。因为类已经被封死,自然不存在子类重写的可能。
区分:final三种用法
①. final 修饰变量:常量,只能赋值一次,不可修改
②. final 修饰方法:可以被继承,但不能被重写
③. final 修饰类:不能被继承,彻底封死
final类的作用
- 保证代码安全性
在Java面向对象开发中,final类有着至关重要的作用,核心是约束类的拓展权限、优化程序性能、规范代码架构,具体作用分为以下三点:
1. 保障代码安全,防止逻辑篡改
项目中的核心业务类、基础工具类,承载着固定的业务规则和底层逻辑。将其定义为final类,禁止被继承,从根源上避免子类重写核心方法、篡改原有业务逻辑的问题,保证程序核心功能稳定、安全,这也是开发中最常用的作用。
- 提高程序效率
2. 优化程序性能,提升运行效率
普通类需要预留继承、方法重写的扩展空间,JVM运行时需要额外做校验判断。而final类结构固定、无法拓展,JVM可以对其进行专属编译优化,省去多余的校验流程,有效提升代码的运行效率。
- 规范代码设计
3. 规范代码设计,统一开发标准
当一个类的功能已经完整、逻辑固定,且后续无需新增拓展功能时,将其定义为final类,是规范的面向对象设计习惯。可以明确告知其他开发者,该类为最终版本,无需修改和继承,统一项目代码风格,减少冗余拓展设计。
Java中常见的final类
-
String 类:最终类,不可继承,保证字符串安全性
-
Math 工具类:数学计算工具,逻辑固定无需扩展
-
包装类:Integer、Double 等,都是 final 类
总结
final类 = 最终类、封闭类,可实例化、可使用,唯一限制:禁止被继承。
在ATM系统、账户系统开发中,一些固定规则的工具类、状态类,都可以定义为final类,让代码更规范、更安全!
