被final修饰的类,变量和方法具有以下特性:
1、final修饰的类不能被继承。
final class Animal {
// 方法体为空
}
// Dog类继承Animal类
class Dog extends Animal {
}
class Example06 {
public static void main(String[] args) {
Dog dog = new Dog(); // 创建Dog类的实例对象
}
}
结果:编译程序报错。
2、final修饰的方法不能被子类重写
class Animal {
// 使用final关键字修饰shout()方法
public final void shout() {
// 程序代码
}
}
// 定义Dog类继承Animal类
class Dog extends Animal {
// 重写Animal类的shout()方法
public void shout() {
// 程序代码
}
}
class Example07 {
public static void main(String[] args) {
Dog dog=new Dog(); // 创建Dog类的实例对象
}
}
结果:编译程序报错。
3、final修饰的变量是常量,只能赋值一次。
public class Example08 {
public static void main(String[] args) {
final int num = 2; // 第一次可以赋值
num = 4; // 再次赋值会报错
}
}
结果:编译程序报错。
Java定义成员变量时会初始化为null,而final关键字修饰成员变量时,虚拟机不会对其进行初始化,所以final修饰成员变量时,需要在定义变量的同时赋予一个初始值,否则编译错误。如下面代码没有赋予初始值而报错。
class Student {
final String name; // 使用final关键字修饰name属性
// 定义introduce()方法,打印学生信息
public void introduce() {
System.out.println("我是大燕,我叫" + name);
}
}
public class Example09 {
public static void main(String[] args) {
Student stu = new Student(); // 创建Student类的实例对象
stu.introduce(); // 调用Student的introduce()方法
}
}
第2行代码改成下面将正确
final String name="小天";