java - 不可变的非最终类

标签 java class immutability

如果一个类可以被子类化(但保留其他规则),它是否仍然被认为是不可变的? 例如:

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; }
}

它是不可变的吗?

最佳答案

字段lengthwidth对于所有子类来说仍然是不可变的(如果它们没有被同名的子类字段遮盖)。

但是子类可以定义它自己的可变字段。

所以答案是:这取决于情况。

如果您不继承具有可变字段的 Rectangle 的其他类,那么答案是肯定的。 否则不行。

关于java - 不可变的非最终类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27849913/

相关文章:

java - 使用Predicate和子文档$type查询mongodb

c# - Fighter类没有实现接口(interface)成员

c++ - 如何在编译或运行时检测对临时问题的 const 引用?

scala - Scala 中的内部类与不变性

javascript - 有什么方法可以将 immutable.js 与 lodash 一起使用?

具有可变列表的 Julia 不可变结构

java - Android Sugar ORM - 带列表的类模型

Java实用程序类的麻烦

java - public void actionPerformed(ActionEvent e) 中表达式的非法开始

java - boolean 值总是返回 true?