Java final

Java final教程

final 英文意思是最终的,在 Java 语言 里面可以表示完结器。final 关键字可以声明类、属性和方法。被 final 声明的属性会变成常量,值将不能够被改变。

被 final 修饰的类将不能有子类,不能被继承。被 final 修饰的方法,子类不能 覆盖

Java final详解

语法

final 属性/方法/类

参数

参数 描述
final 使用 fianl 的关键字,放在对应的信息前面

说明

和一般的关键字一样,final 也是放在对应的属性或者方法或者类前面即可。被 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 { }

我们会发现,代码编译报错:

06 final类不能继承.png

final修饰方法或者属性

我们还是定义一个 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 不能被修改。

07 final 修饰符属性不能被重新赋值.png

在学生类里面,我们想覆盖父类的 getInfo 方法也会报编译异常,因为它在父类中被 final 关键字修饰了。

08 final 方法不能覆盖.png

Java final关键字总结

在 Java 语言 中被 final 关键字修饰的属性是必须一开始就需要赋初始值,并且不能够被改变的。如果定义一个类不想被别人继承,可以给类加 final 关键字修饰。父类中被 final 修饰的方法,在子类里面是不能够被覆盖的。