Java 关键字之 final
欢迎学习 Java 基础文章系列之 final 关键字
- final 代表什么意思?
- final 通常是指无法被改变或者不能被改变的,什么情况下不想被改变呢?
- 不想改变可能有两种原因:设计或者效率。
- final 通常是指无法被改变或者不能被改变的,什么情况下不想被改变呢?
- 在Java中 final 关键字会在哪几个地方使用到?
- 有三种地方使用:数据(成员变量、参数)、方法、类。
- final 数据(成员变量、参数)
常量以关键 final 表示,必须是基本数据类型。
对于基本类型使数值恒定不变,而用于对象引用,使引用恒定不变,一旦引用被初始化指向一个对象,就无法改为指向另一个对象,然而对象其自身却是可以被修改的,Java 并未提供使任何对象恒定不变的途径(但是可以自己编写类已取得是对象恒定不变的效果),这一限制同样适用于数组,它也是对象。- 空白 final
Java 允许生成:“空白 final”,即被声明为 final 但又未给定初始值的域。 - final 参数
Java中允许在参数列表中以声明的方式将参数指明为 final。无法在方法中更改参数引用所指向的对象。
你可以读取参数,但却无法修改参数,这一特性主要用来向匿名类传递数据。
- 空白 final
- final 方法
final 方法的考虑:出于对设计的考虑:确保在继承中使方法行为保持不变,并且不会被覆盖,或者出于效率(遭受劝退了)。
该方法不会被重写(覆盖、覆写)。
final 和 private 关键字
类中所有的 private 方法都是隐式地指定为 final 的。由于无法使用 private 声明的方法,所以也就无法重写该方法。
如果试图重写一个 private 方法(隐含式的 final),似乎是可行的,并且编译器也不会提示错误。
“重写(覆盖、覆写)”只有在某方法是父类的接口(非interface)的一部分时才会出现。
final修饰的方法在特定的访问权限下可以被继承。
这是因为,方法是否被final修饰与方法的访问权限是两回事,没有任何关系,被final修饰的方法和未被final修饰的方法都可以自由的指定访问权限。
我们有兴趣去谈论final关键字和访问权限关键字在修饰方法的过程的起到的作用,如下表(声明:final和访问权限是两个独立的概念,没有任何比较意义,所有本表仅方便读者理解,不可作为正统知识)
- final 数据(成员变量、参数)
- 有三种地方使用:数据(成员变量、参数)、方法、类。
protect关键字 | final关键字 | private关键字 | |
---|---|---|---|
是否可以继承 | 是 | 是 | 否 |
是否可以重写 | 是 | 否 | 否 |
小结 | private < final < protect (仅适用于方法) |
正如上表所示,private实现了final方法不可重写的功能,并附加不可继承功能。(再次声明:final和访问权限是两个独立的概念,没有任何比较意义,所有上表仅方便读者理解,不可作为正统知识)可以对private方法添加final关键字,但是这种做法没有任何意义。
* final 类
final 类的考虑:对该类的设计永不需要做任何变动,或者出于安全的考虑不希望它有子类。
该类不能被继承,final 类中所有的方法都是隐式指定为 final 关键字的。