前言:
继承的弊端:打破了封装性。(如果父类的功能都可以被子类重写,就打破了父类的封装性。)
只要不让其他类继承该类,就不会有重写。
怎么能实现呢?通过Java中的一个关键字来实现,final(最终化)。
final关键字
是一个修饰符,可以修饰类,方法,变量(成员变量,局部变量,静态变量)。
对比:static 只能修饰成员。
特点
1,final修饰的类是一个最终类,不能在派生子类。
注意:final类如果被继承,错误提示如下:
注意:字符串类,就是一个final类,永远不可能被继承,不可能有子类。
如果类中从出现部分可以重写,部分不可以重写,只要让指定的方法final最终化就可以了。
2,final修饰的方法是最终方法,不可以给重写。
如果重写final方法,会出现如下错误提示:
3,final修饰的变量是一个常量,只能被赋值一次。
比如:final int count=20;
如果为final修饰的变量赋值,则会报错:
其实在java文件编译成class文件以后,System.out.println(count);实际上已经变成了System.out.println(21);final修饰的变量就是一个常量。
什么时候会在程序中定义final常量呢?
当程序中一个数据使用时是固定不变的,这时为了增加阅读性,可以给该数据起个名字。
这就是变量,为了保证这个变量的值不被修改,加上final修饰,这就一个阅读性很强的常量(这样不用去关注final变量的值,而只关注final变量的名字就可以了)。
书写规范,被final修饰的常量名所有的字母都是大写的。如果由多个单词组成单词间通过 _ 连接。
比如:final double PI=3.14;
为了访问方便(通过类名.成员直接调用),通常要加static
如下:static final double PI=3.14;
下面例子:
如果在某个类中定义: static final int number;则会报错:
因为number被定义为final,相当于final把number最终化,但是number是没有值的(显示初始化值),只有一个内存中的一个默认初始化值,所以会报错。
因而最终化的,都是针对显示初始化值而言的:比如:static final int number=4; |
|