请让我知道为什么在实践中Java并发中讨论了以下类为什么是不可变的-作者:Brian Goetz

@Immutable
public class Point {
    public final int x, y;

    public Point(int x, int y) {
        this.x = x;
        this.y = y;
    }
}

由于该类不是最终的,所以任何类都可以扩展它,但是为什么它仍然是不可变的?

最佳答案

它是不可变的,因为一旦构造了它的实例,就无法以任何方式更改其内部状态。这是因为它没有设置器,并且x和y是最终值,即您无法更改/更改x或y值。

编辑(检查该示例):

package test;

public class Test002 {

    public static void main(String[] args) {
        Point1 p1 = new Point1(4, 10);
        consume(p1);
    }

    public static void consume(Point p){
        System.out.println("=============");
        System.out.println(p.x);
        System.out.println(p.y);

        if (p instanceof Point1){
            System.out.println("=============");
            Point1 p1 = (Point1)p;
            p1.setX(5);
            p1.setY(11);
            System.out.println(p.x);
            System.out.println(p.y);
            System.out.println(p1.getX());
            System.out.println(p1.getY());
        }
    }

}



class Point {
    public final int x, y;

    public Point(int x, int y) {
        this.x = x;
        this.y = y;
    }
}

class Point1 extends Point {
    private int x;
    private int y;

    public Point1(int x, int y) {
        super(x, y);
        this.x = x;
        this.y = y;
    }

    public void setX(int x) {
        this.x = x;
    }

    public void setY(int y) {
        this.y = y;
    }

    public int getX() {
        return x;
    }

    public int getY() {
        return y;
    }
}

10-06 08:35