したがって、フィールドの1つが抽象クラス型であるクラスがあります。エイリアシングが発生しないようにコンストラクタを作成する必要があります。コンストラクタが取得するColorオブジェクトを参照するのではなく、コピーしてColorフィールドにコピーを割り当てることができます。 抽象クラス型のフィールドを持つオブジェクトを作成するには?
class Shape {
private Color color; /* Color is an abstract class */
public Shape(Color c) {
/* How do we assign a clone
of `c` into `color`? */
}
/* Methods */
...
}
abstract class Color {
private String colorModel;
private float transparency;
/* Methods */
...
}
我々が使用することはできませんcolor = c.clone()
コンパイラは次のエラーを発行しますので、
- 「型の不一致:ColorにObjectから変換することはできません」
- "Object型のメソッドclone()は表示されません。"
この問題の解決策はありますか?
おそらく、呼び出し元コードが任意のColor実装(どうやら)とどのように動作するかを考えれば、おそらくこれを実行する最良の方法です。コピーコンストラクタは、Coloneableインターフェイスを実装する良い方法です(つまり 'return new ColorType(this);') – user268396