final有“终态”和“不可变”的意思,它可以修饰非抽象类、非抽象方法、变量和方法参数。
一、final类
用final修饰的类没有子类,所以不能够被继承。
在设计类的时候,如果这个类不需要有子类,类的实现细节不允许被改变,并且确信这个类不会被扩展,那么就设计为final类。
二、final方法
final方法不能被子类覆盖,但可以被继承。
- public和protected修饰的final方法
由于用public和protected修饰的final方法对于子类而言具有可见性,所以子类不能覆盖它们。 - private修饰的final方法
由于private修饰的方法对于子类而言不具有可见性,所以子类再实现一个签名一样的方法,只能称之为拓展,而不是覆盖。 - default的final方法
没有用访问修饰符修饰的final方法,在本包子类中,不能覆盖,因为可见;而在其他包的子类中,由于不可见,可以拓展一个签名一样的方法。
三、final变量
用final修饰的变量相当于常量,只能赋值一次,以后不能再修改。final变量可以在声明的时候直接初始化,也可以先声明,而不赋初值,这种变量也称为final空白。
- final静态变量
这种final空白要在static代码块里进行初始化。 - final成员变量
要在构造函数里初始化。 - final局部变量
在成员方法中,只能赋值一次。
四、final参数
方法的参数其实也是一种局部变量,它的作用域就是当前方法,当参数被final修饰时,我们可以读取该参数,但是无法改变参数值。
五、final和static
final static方法没有意义,因为static方法本来就不会被子类覆盖。
final static变量相当于“全局常量”。
六、final和abstract
不能连用,final不允许子类覆盖,而abstract则要求子类重写它,互相矛盾。
转载请注明如下内容:
文章来自简书,作者:就是杨宗
原文链接:http://www.jianshu.com/p/2f1763e72ecf