問題は、私が作成したLeftCell/RightCellオブジェクトは、このdraw()メソッドにアクセスすることはできませ もちろんやるということです。
子クラスに固有のメソッドは、それがわからない親インスタンスで呼び出されることはもちろんありません。
あなたの条件1つのプロジェクトでは、コードの重複 を減らすために変更すること
継承階層であるので、私は2つのクラスLeftCellとRightCell、クラスのセルを拡張し、両方の を持っています。 さて、コードの重複を避けるために、私は 複数の他のプロジェクト
私はあなたが少し違うものを作るべきだと思い
でこれらのオブジェクトを使用します。
あなたの例のようにLeftCell
とRightCell
を複製するクラスの可能性はない組み合わせの数を爆発回避したい場合:
Cell
CellProjectX
LeftCell
RightCell
最終的に完了することができます
Cell
CellProjectY
LeftCell
RightCell
Cell
CellProjectZ
LeftCell
RightCell
特定のプロジェクトCell
の実装を作成するために、継承よりも構成を優先してください。一般的なセル構造については
:
Cell
サブクラスは、任意のCell
のための共通のメソッドを定義し、あなたはそれのための一般的な実装を定義AbstractCell
クラスを持つことができCell
インターフェースである可能性があります。
public interface Cell{
int getValue();
void setValue(int value);
}
public abstract class AbstractCell implements Cell{
...
}
次にあなたがAbstractCell
を拡張することによりRightCell
とLeftCell
を定義することができます。プロジェクトへの特異的な細胞の実装については
public class RightCell extends AbstractCell {
...
}
public class LeftCell extends AbstractCell {
...
}
を:
今あなたが作成することができ、特定のプロジェクトにそれをCell
インスタンス(最終的にはLeftCell
またはフードの下にある特定のプロジェクト具体的なクラスのCell
インターフェイスを実装するために使用されます。
特定の実装では、プロジェクトに固有の必要なメソッドを追加できます。
例えば:
CellProject1 leftCell = new CellProject1(new LeftCell());
CellProject1 rightCell = new CellProject1(new RightCell());
leftCell.draw();
rightCell.draw();
そして、あなたが書くことができる具体的なwrite()
方法、でCellProject2
のインスタンスを使用して別のプロジェクトで:
CellProject2 leftCell = new CellProject2(new LeftCell());
CellProject2 rightCell = new CellProject2(new RightCell());
leftCell.write();
rightCell.write();
class CellProject1 implements Cell {
private Cell cell;
CellProject1 (Cell cell){
this.cell = cell;
}
public int getValue(){
cell.getValue();
}
public void setValue(int value){
cell.setValue(value);
}
public void draw(){
...
}
}
あなたはとてもそのようなCellProject1
インスタンスを作成することができます