final 意思是“最终的,最后的”,我认为是不可变的,他能够修饰类,变量和方法。因此能够认为他所修饰的类,变量和方法都是不能改变的。安全
1.final修饰类spa
被final修饰的类不能被继承,即他不能拥有本身的子类,不然会报错。对象
首先 建立一个用fianl 修饰的父类Test继承
而后建立一个子类test 继承Testtest
点进去看一下报警信息,效率
意思是类test不能被final修饰的类Test。基础
2.final修饰方法变量
被final 修饰的方法不能被重写,可是:权限
重写的前提是子类能够从父类中继承此方法,因此当父类中被final修饰的方法的访问权限为private时,子类中就能够重写此方法。程序
(一)父类中方法控制权限为public
首先在父类中建立一个方法,并用final修饰
而后在子类中中重写work方法,能够看到当子类重写父类中final修饰的方法是,报错了,报错信息以下:
即子类不能重写父类中被final修饰的方法
(二)父类中方法控制权限为private
final修饰的变量,不管是类属性,对象属性,形参仍是局部变量,都须要进行初始化操做。
(1)修饰变量
能够看到被final修饰的变量报错了,是由于final修饰的字段fa没有被初始化,因此当变量被final修饰是要赋值初始化,当初始化以后就不会报错。
(2)修饰类属性
也是须要初始化的
结合以上的基础知识,咱们来分析一下为什String类是final的?
这个例子标明,让一个普通类继承String类,结果发现报错了.
即Test不能是final类String的子类,这里已经很明显地看出String类是final的,可是究竟是为啥子呢?
(1)因为String类不能被继承,因此就不会没修改,这就避险了由于继承引发的安全隐患
(2)String类在程序中出现的频率较高,为了不安全隐患,它每次出现是都用final来修饰,这无疑会下降程序的执行效率,因此干脆直接将其设为final提升效率