final关键字
为了避免子类随意修改继承的类,改写其内容,java提供了final关键字用于修饰不可改变的内容
- 类:被final修饰的类不能被继承
- 方法:被final修饰的方法不能被重写
- 变量:被final修饰的变量,有且只能被赋值一次
1.使用方式
修饰类
格式:
final class 类名{
}
代码:
final class Fu{
}
//class Zi extends Fu{ //报错,不能继承被final修饰的Fu类
}
修饰方法
格式:
修饰符 final 返回值类型 方法名(参数列表){
}
代码:
class Fu{
final public void show(){
System.out.println("show");
}
}
class Zi extends Fu{
// @Override
// public void show1() {
// System.out.println("Zi2 show1");
// } 报错,被final修饰的方法不能被重写
}
修饰局部变量
局部变量——基本类型 基本类型的局部变量,被final修饰后,只能赋值一次,不能再更改。代码如下:
final int a = 20;
// a = 30;//final修饰局部变量:这个变量只能使用一次=赋值
/*
final int c = 0;
for (int i = 0; i < 10; i++) {
c = i;
System.out.println(c);
}
*/ //报错 c在for循环内被重新赋值、
正确写法:
for (int i = 0; i < 10; i++) {
final int c = i; //每次循环重新定义了final变量c 不报错
System.out.println(c);
}
修饰成员变量
成员变量涉及到初始化的问题,初始化方式有显示初始化和构造器初始化,只能选择其中一个
显示初始化
public class Student {
final int num = 10;
}
构造器初始化
public class Student {
final int num = 10;//这里初始化后,构造方法不能再初始化
final int num2;
public Student() {
this.num2 = 20;
//this.num2 = 20;
}
public Student(String name) {
this.num2 = 20;
//this.num2 = 20;
}