Final关键字

final可以修饰类、属性、方法、局部变量。

  1. 不希望类被继承时使用
  2. 不希望父类的某个方法被子类覆盖或重写
final的基本操作
public class Final01 {
    public static void main(String[] args) {

    }
}

final class A {
} // 不允许被继承的类

//class B extends A{}
class C {
    public final void hi() {

    }
}

class D extends C {
//    @Override
//    public void hi() {
//        super.hi();
//    }
//}
}

class E {
    public final double PI_NUMBER = 3.14;
}

class F {
    public void say() {
        final double NUM = 10;
//        num = 9; 不能修改被final修饰的属性
        System.out.println(NUM);

    }
}

final修饰的属性又叫做常量,一般用大写字母下划线连接来命名。

final修饰的属性必须赋初值,并且往后不能在修改。赋值的位置:

  1. 定义时(public final int A =10)。
  2. 在构造器中。
  3. 在代码块中。
public class Final01 {
    public static void main(String[] args) {

    }
}
class A{
    public final double MAX_NUMBER=99;
    public final double MAX_NUMBER2;
    public final double MAX_NUMBER3;
    public A(){
        MAX_NUMBER2=99;
    }
    {
        MAX_NUMBER3=99;
    }
}

如果类不是final类,方法是final方法则,类可以继承,但是方法不能重写。

public class Final01 {
    public static void main(String[] args) {
        C c = new C();
        c.say();
        //方法不是不能重写
    }
}
class B {
    public final void say() {
        System.out.println("这是say方法");
    }
}
class C extends B{    }

如果一个类是final类其中的方法就不用加final了。final不能修饰构造方法。final和方法一起用效率高。

public class Final01 {
    public static void main(String[] args) {
        System.out.println(A.num);
    }
}
class A{
    public static final int num=11;
    static {
        System.out.println("A类的静态代码块");
    }
}

包装类:Integer、Double、Float、Boolean、String等都是final类。

posted @ 2024-04-03 23:35  Dr丶云幕  阅读(7)  评论(0编辑  收藏  举报