final关键字

168 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

final关键字

package JavaSE.JavaOOP.finaldemo;
/*
    final 修饰 类,方法,属性

    修饰 类:不能被继承
        方法:不能被重写
        属性:不能修改属性值
 */
public class FinalDemo1 {
    //final属性
    final double PI=3.1415926;
    final int n;
    final static int m=10;
    //final static int m; 报错: Variable 'm' might not have been initialized
    //final修饰的属性可以直接赋值或构造方法对其初始化
    //final static 修饰的属性则必须在声明时就初始化,且被修饰的属性在内存中只有一份,被所有对象共享

    //构造方法对final变量初始化
    public FinalDemo1(int a){
        n=a;
    }

    //final方法
    public final void a(){
        System.out.println("final修饰的方法");
    }

    /*
    void setPI(double d){ PI=d; }
    编译报错:Cannot assign a value to final variable 'PI'
    final变量无法修改
    */

    public void b(){
        System.out.println("普通方法");
    }
}

package JavaSE.JavaOOP.finaldemo;
//测试例1
public final class Test extends FinalDemo1 {

    public static void main(String[] args) {
        FinalDemo1 f = new Test(2);
        System.out.println(f.m);//输出静态常量
        System.out.println(f.PI);//输出常量
        f.a();//final方法
        f.b();//一般方法
    }

    public Test(int a) {
        super(a);
    }

    /*
    只能重写非final方法
    public final void a(){}
    编译报错:子类不能重写父类final方法,只能将父类final方法改为非final方法
    */

    @Override//非final方法可以重写
    public void b() {
        System.out.println("子类方法");
    }

}

运行结果: [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-irAUV7vg-1620807376593)(final/p1.jpg)] 我们看一下继承final类的效果:

package JavaSE.JavaOOP.finaldemo;
public class Test1{
//public class Test1 extends Test{
    //编译报错
    //final类不能被继承
}