私がしようとしているのは、抽象クラスにフィールドがあり、この抽象クラスが子クラスに継承されているときに、そのフィールドをクラスの子として持つことができることです。抽象親でabastractの親フィールドのサブクラスを指定する方法
たとえば、Playerを継承する抽象的なPlayerクラス、次にClientとOpponent(マルチプレイヤーゲーム用)があります。プレイヤーにはユニット型のフィールドがあります。ユニット自体はClientUnitとOpponentUnitによって継承されます。クライアントのコンストラクタにClientUnitを渡してUnit(継承、duh)として割り当てることができますが、例外や危険を冒すことなくClientUnitオブジェクトの形式で返すゲッターはどのようにして得られますか?
編集:問題をより詳しく説明するためにいくつかのコードを追加しました。
public abstract class Player {
private Unit unit;
public void setUnit(Unit unit) {
this.unit = unit;
}
public Unit getUnit() {
return unit;
}
}
public class Client extends Player {
@Override
public ClientUnit getUnit() {
return (ClientUnit)super.getUnit();
}
}
これは機能しているようですが、それが安全で堅牢な方法であるかどうかはわかりません。
何の例外?何を試しましたか?戻り値の型をより具体化するためにメソッドをオーバーライドすることができますか? –
いくつかのコードを提供してください、より多くの人々があなたの問題を解決しようとするでしょう。ビジターパターンが必要なように見えます。 –
私は抽象クラスでユニットフィールドをプライベートにして、getterとsetterをそこから使用してみました。そして、それらのgetterとsetterをClientUnitやstuffへのキャストでオーバーライドしましたが、それを行う堅牢な方法ではありません。 – Whiskydog