final 英文意思是最终的,在 Java 语言 里面可以表示完结器。final 关键字可以声明类、属性和方法。被 final 声明的属性会变成常量,值将不能够被改变。
被 final 修饰的类将不能有子类,不能被继承。被 final 修饰的方法,子类不能 覆盖。
final 属性/方法/类
参数 | 描述 |
---|---|
final | 使用 fianl 的关键字,放在对应的信息前面 |
和一般的关键字一样,final 也是放在对应的属性或者方法或者类前面即可。被 final 修饰符属性,一般在实际项目中建议英文单词全部大写。
我们定义一个 final 类型的父类 Person。
package com.haicoder.net.haifinal;
public final class Person {
private String name;
private Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
定义一个学生类,继承 Person 类。
package com.haicoder.net.haifinal;
public class Student extends Person {
}
我们会发现,代码编译报错:
我们还是定义一个 Person 类,里面定义了一个 final 类型的方法,这边的类不是 final 类型。
package com.haicoder.net.haifinal;
public class Person {
private String name;
private final Integer age = 21;
public void setAge(Integer age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public final void getInfo(){
System.out.println("姓名 : " + this.getName() + " 年龄 :" + this.getAge());
}
}
定义一个学生类
package com.haicoder.net.haifinal;
public class Student extends Person {
public void getInfo(){
System.out.println("");
}
}
我们会发现,Person 类里面定义了一个被 final 关键字修饰的 age 属性,它编译就报错了,在 setAge 的时候,报异常,age 不能被修改。
在学生类里面,我们想覆盖父类的 getInfo 方法也会报编译异常,因为它在父类中被 final 关键字修饰了。
在 Java 语言 中被 final 关键字修饰的属性是必须一开始就需要赋初始值,并且不能够被改变的。如果定义一个类不想被别人继承,可以给类加 final 关键字修饰。父类中被 final 修饰的方法,在子类里面是不能够被覆盖的。