とパラメータを持つ不変Point
のクラスと、次のように定義されたメソッドがあるとします。x
y
add
class Point:
Point add(int x, int y):
return new Point(this.x + x, this.y + y);
不変であるため、新しいポイントを返します。Pointを拡張して再定義するクラスができるまで、これはすべてうまくいきますadd
。
class ColoredPoint extends Point:
ColoredPoint add(int x, int y):
return new ColoredPoint(this.x + x, this.y + y, this.width, this.height)
新しい定義を作成する必要があります。そうしないと、add
onのメソッドColoredPoint
が返さPoint
れ、これが正しくないためです。しかし、オーバーライドしているため、これはほとんどの言語では機能しませんadd
が、リターンタイプについてのみ明確にしています。言語では、ほとんどの場合あいまいになる可能性があるため、returntypeでのみ明確化されるメソッドを使用することはできません。
どうしようか?
私が見る唯一の解決策は次のとおりです。
- 両方に次のようなインターフェースを実装させます
IPositionable
- 不変性をあきらめます。
他に何か?