Java final 修饰符

作者: 就是杨宗 | 来源:发表于2017-09-29 01:41 被阅读13次

    final有“终态”和“不可变”的意思,它可以修饰非抽象类、非抽象方法、变量和方法参数。

    一、final类

    用final修饰的类没有子类,所以不能够被继承。
    在设计类的时候,如果这个类不需要有子类,类的实现细节不允许被改变,并且确信这个类不会被扩展,那么就设计为final类。

    二、final方法

    final方法不能被子类覆盖,但可以被继承。

    1. public和protected修饰的final方法
      由于用public和protected修饰的final方法对于子类而言具有可见性,所以子类不能覆盖它们。
    2. private修饰的final方法
      由于private修饰的方法对于子类而言不具有可见性,所以子类再实现一个签名一样的方法,只能称之为拓展,而不是覆盖。
    3. default的final方法
      没有用访问修饰符修饰的final方法,在本包子类中,不能覆盖,因为可见;而在其他包的子类中,由于不可见,可以拓展一个签名一样的方法。
    三、final变量

    用final修饰的变量相当于常量,只能赋值一次,以后不能再修改。final变量可以在声明的时候直接初始化,也可以先声明,而不赋初值,这种变量也称为final空白。

    1. final静态变量
      这种final空白要在static代码块里进行初始化。
    2. final成员变量
      要在构造函数里初始化。
    3. final局部变量
      在成员方法中,只能赋值一次。
    四、final参数

    方法的参数其实也是一种局部变量,它的作用域就是当前方法,当参数被final修饰时,我们可以读取该参数,但是无法改变参数值。

    五、final和static

    final static方法没有意义,因为static方法本来就不会被子类覆盖。
    final static变量相当于“全局常量”。

    六、final和abstract

    不能连用,final不允许子类覆盖,而abstract则要求子类重写它,互相矛盾。

    转载请注明如下内容:

    文章来自简书,作者:就是杨宗
    原文链接:http://www.jianshu.com/p/2f1763e72ecf

    相关文章

      网友评论

        本文标题:Java final 修饰符

        本文链接:https://www.haomeiwen.com/subject/ubxvextx.html