final 具有不可更改的意思,它可以修饰非抽象类,非抽象成员方法和变量。
用 final 修饰的类不能被继承,没有子类 如 String
用 final 修饰的方法不能被子类的方法覆盖
用 final 修饰的变量表示常量,只能被赋值一次
用 final 不能修饰构造方法,因为方法覆盖这一概念仅适用于类的成员方法,而不适用于类的构造方法,父类的构造方法和子类的构造方法之间不存在覆盖关系,因此用 final 修饰构造方法是豪无意义的。
父类中用 private 修饰的方法不能被子类的方法覆盖,因此 private 类型的方法默认是 final 类型的。
final 类
String 类 ,不让继承,封装实现的细节。
final 方法
在某些情况下,出于安全的原因,父类不允许子类覆盖某个方法,此时可以把这个方法声明为 finnal 类型。java.lang.Object 类,getClass()为 final 类型,equals()不为 final 类型。
final 变量
用 final 修饰的变量表示取值不会改变的常量。
final 修饰符可以修饰静态变量,实例变量和局部变量,分别表示静态常量,实例常量和局部常量。
例如 出生日期,年龄的限制等。
final 变量都必须显示初始化,否则会导致编译错误。
final 变量只能被赋值一次。
在程序中使用 final 修饰符来定义常量的作用
提高程序的安全性,禁止非法修改取值固定并且不允许修改的数据
提高程序代码的可维护性。
实例:
package com.test;
public interface PublicInterface {
public final int page=0;
//public final Integer pageI=null;
//public final void toFinal(); 编译错误用 final 修饰的方法不能被子类的方法覆盖,因为接口里的方法都需要被实现的
}
package com.test;
public class PublicSubClass implements PublicInterface {
public static void main(String[] args) {
// PublicSubClass.page =10; //报错
int page = PublicSubClass.page;
System.out.println(PublicSubClass.page);
}
}