如果一个类可以被子类化(但保留其他规则),它是否仍然被认为是不可变的? 例如:
abstract class Figure {
abstract double area();
}
class Rectangle extends Figure {
private final double length;
private final double width;
Rectangle(double length, double width) {
this.length = length;
this.width = width;
}
double area() { return length * width; }
}
它是不可变的吗?
最佳答案
字段length
和width
对于所有子类来说仍然是不可变的(如果它们没有被同名的子类字段遮盖)。
但是子类可以定义它自己的可变字段。
所以答案是:这取决于情况。
如果您不继承具有可变字段的 Rectangle
的其他类,那么答案是肯定的。
否则不行。
关于java - 不可变的非最终类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27849913/