在 Java 中 final 被称为终结器。
1. 修饰属性(成员变量) – 表示常量
-
使用
final
定义的变量就成了常量,常量必须在声明时赋值,并且赋值后无法修改。定义常量全用大写字母,多个单词间以_分隔。 -
Java中一般定义常量final和
static
共同使用,static是为了节省空间。 -
final修饰数据类型时,无论是基本类型还是引用类型,值不能变,对于引用数据类型,不可变指的是指向不能变(保存的内存地址不能变)。
class A {
public static final int MAX_GRADE = 100;
public A() {
MAX_GRADE = 120;
}
}
public class FinalXiuShiShuXing {
public static void main(String[] args) {
System.out.println(new A().MAX_GRADE);
}
}
2. 修饰方法 – 封装
被final修饰的方法不能被覆写!!!
class A {
public final void fun() {
System.out.println("父类");
}
}
public class FinalXiuShiFangFa extends A {
public static void main(String[] args) {
}
public void fun() {
System.out.println("子类");
}
}
因为父类的
fun
方法是public修饰,子类可以继承到此方法,导致了重写了父类的final
方法,编译出错。
class A {
private final void fun() {
}
}
public class FinalXiuShiFangFa extends A {
public static void main(String[] args) {
}
public void fun() {
}
}
因为父类中的方法是private修饰,子类中不能继承到该方法(不能覆写),即子类中的
fun
方法是重新定义的,属于子类本身的方法,编译正常。
3. 修饰类
被final修饰的类不能有子类!!!
final class A {
public A() {
}
}
public class FinalXiuShiLei extends A {
public static void main(String[] args) {
}
}