关键字 final
1.修饰类时 说明类是最终的类,即类不能有子类。换句话说就是类不能被继承。
public final class Final {
}
class Test extends Final{//该类在编译时报错,无法继承Final
}
如上代码,用final修饰Final类后,Test类继承Final会报错,故final修饰的类无法被继承。
2.修饰方法时 说明方法是最终的方法,即方法不能被子类重写。
public class Final {
public final void test(){
}
}
class Test extends Final {
public final void test(){//在重写Final类中的test方法时报错
}
}
如上代码,子类Test继承父类Final,子类在重写父类Final类中的test方法时报错,即final修饰的方法无法被重写。
3.修饰变量时 说明变量是最终的,即变量的值不能发生变化。(如果变量没赋值,有一次赋值机会)。
public class Final {
public final int x = 10;
}
class Test {
public static void main(String[] args) {
Final test = new Final();
test.x = 20;//在给Final中的x赋值时报错
}
}
如上代码,在main()函数中定义了一个Final的变量test,在用test.x给x赋值时报错,即final修饰的方法无法被赋值。
有一种特殊情况:
class Test {
public static void main(String[] args) {
final int x;
x = 20;
x = 10;//此处x赋值时报错
}
}
如上代码,在main()函数中,定义x变量,此时对x进行赋值,第一次赋值可以成功,第二次会报错,即final修饰的变量没赋值,有一次赋值机会。
PS:因为final修饰的变量,值不能发生变化,所以我们通常把final修饰的变量称为常量,变量名一般用纯大写命名。
总结:1.final修饰类时,该类无法被继承
2.final修饰方法时,该方法无法被重写
3.final修饰变量时,变量只有一次赋值机会