final关键字

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 定义的是全局常量的每一个字母都要求大写

原文地址:https://www.cnblogs.com/anyux/p/11904202.html