final在程序中描述为终结器的概念,在java中使用final定义类、方法、属性
1.使用final定义的类不能再拥有子类
观察final定义的类、
final class A{
}
class B extends A{
}
public class testDemo{
public static void main(String args[]){
}
}
编译报错
root@079a25844567:/opt/lixinghua/OOP# javac testDemo.java
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF8
testDemo.java:4: error: cannot inherit from final A // 不能继承 A类
class B extends A{
^
1 error
一般地,开发系统类的会使用到final,如果进行架构代码的开发,也会用到final,只是使用者很少会自已定义的final类
2.使用final定义的方法,不能被子类覆写
在一些时候由于某些父类具备某隐藏的特性,那么子类必须使用此方法操作的时候,就加上final。意思是子类不要去破坏这个方法的重要的作用
class A{
public final void get(){
}
}
class B extends A{
public void get(){
}
}
public class testDemo{
public static void main(String args[]){
}
}
编译报错
root@079a25844567:/opt/lixinghua/OOP# javac testDemo.java
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF8
testDemo.java:7: error: get() in B cannot override get() in A
public void get(){
^
overridden method is final
1 error
以上两个final对我们使用意义不大
3.使用final定义的变量就成为了常量,常量必须在定义时设置好内容,并且不能修改
class A{
final double GOOD=100.1;
public final void get(){
GOOD=1.1;
}
}
class B extends A{
}
public class testDemo{
public static void main(String args[]){
}
}
编译报错
root@079a25844567:/opt/lixinghua/OOP# javac testDemo.java
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF8
testDemo.java:4: error: cannot assign a value to final variable GOOD
GOOD=1.1;
^
1 error
使用常量可以利用一些变量名称表示一些数值
为了让常量和变量有效地区分,所有的常量名称都要求使用大写字母的方式表示
特别需要介绍的是全局常量:public static final 声明的就是全局常量
public static final String STR="MLDN";
static 的数据保存在公共数据区,所以此处的常量就是一个公共的常量
总结
1.对于final定义的类或方法,一定不要继承或覆写
2.发现public static final 定义的是全局常量的每一个字母都要求大写