章10——面向对象编程(高级部分)——final关键字

基本介绍

注意事项

final修饰不同东西
属性:相当于常量,需要赋初值(构造器(除static)、代码块、定义时)。
构造器不可以是静态的,因为构造器中隐含了super和this。
类:不可继承。
方法:不可重写,但可继承。因为不可以重写的特质不可以修饰构造方法。
final和static搭配效率高是因为:不会导致类加载。

但是不是说,final修饰后相当于常量,赋初值后不可修改吗?

有关一点思考:

public class FinalExercise01 {
    public static void main(String[] args) {
        Circle circle = new Circle(2.4);
        double ans = circle.calculateS();
        System.out.println(ans);
        Circle circle1 = new Circle();
        circle1.radius = 2.4;
        ans = circle1.calculateS();
        System.out.println(ans);
    }
}

class Circle{
    public double radius;
    private final double PI ;

    public Circle(){
        PI = 2;
    }

    public Circle(double radius) {
        this.radius = radius;
        PI = 3.14;
    }

    public double calculateS(){
        return PI * radius * radius;
    }
    
    public void print(){
        System.out.println(PI);
    }
    
}

如上代码最终可以得出,虽然final修饰的属性是常量,但由于没有static修饰时,不同对象都有一个final值,所以此时PI的值不唯一。
但若加上static修饰,赋初值只可在静态中赋值,此时PI全类仅有唯一实例。

posted @ 2024-09-05 20:26  gknives  阅读(28)  评论(0)    收藏  举报