将重复代码移动到超类Java时覆盖实例变量

时间:2015-02-07 16:11:11

标签: java oop inheritance polymorphism

我正在编写一个元胞自动机模拟程序,我目前有几个Cell对象的子类,对应于我想要运行的每种类型的模拟,每个子类都有一个setNeighbors方法,另一个类调用它来设置一个Cell的邻居取决于它在网格中的位置。

public abstract class LifeCell extends Cell{
    protected List<LifeCell> myNeighbors

    public void setNeighbors(List<LifeCell> neighbors){
        myNeighbors=neighbors;
    }

public abstract class FireCell extends Cell{
    protected List<FireCell> myNeighbors

    public void setNeighbors(List<FireCell> neighbors){
        myNeighbors=neighbors;
    }

等。 setNeighbors方法目前在子类之间重复,我想将邻居列表作为抽象Cell对象列表移动到Cell超类中。我的Cell超类中的代码目前看起来像这样:

public abstract class Cell {
    List<Cell> myNeighbors;

    public void setNeighbors(List<Cell> neighbors){
        myNeighbors = neighbors;
    }
}

然而,重要的是子类中的相邻Cell列表与每个特定子类具有相同类型的Cell(GameOfLifeCells应该只有GameOfLifeCells作为它们的邻居)。我似乎不可能在超类中声明一个邻居列表,然后用子类中的typeCell列表覆盖该实例变量。

我怎样才能表达每个Cell都有相同类型的邻居并且仍然可以从超类访问此List的关系?

1 个答案:

答案 0 :(得分:0)

也许有点像这样:

abstract class TestSuper<T extends TestSuper>{
    protected List<T> myList;
    public void method( List<T> param ){
        myList = param;
    }
}

class TestChild extends TestSuper<TestChild>{}