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