的问题是,我创造的任何LeftCell/RightCell对象,请 当然无法获得这场平局()方法。
特定于子类的方法当然不能在不知道它的父实例上调用。
由于您的要求是
继承层次改变,以减少代码的重复 在一个项目中,我有两个类LeftCell和RightCell,既 扩展类细胞。 现在,为了避免代码重复,我想在 多个其他项目
我认为你应该做的事情有点不同使用这些对象。
如果你想避免爆炸的组合可能的班,而不是复制LeftCell
和RightCell
就像你的例子数量:
Cell
CellProjectX
LeftCell
RightCell
可能由最终完成:
Cell
CellProjectY
LeftCell
RightCell
Cell
CellProjectZ
LeftCell
RightCell
你应该赞成继承的构成来创建你的特定项目实现。
对于常见的细胞结构:
的Cell
子类可以是一个Cell
接口定义任何Cell
常用的方法,你可以有一个AbstractCell
类,定义了它常见的实现。
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
实现实例),它将在特定项目具体类中用于实现接口Cell
。
在具体实施中,您当然可以添加任何特定于该项目的方法。
例如:
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
情况下,这样的:
CellProject1 leftCell = new CellProject1(new LeftCell());
CellProject1 rightCell = new CellProject1(new RightCell());
leftCell.draw();
rightCell.draw();
而且在使用CellProject2
实例与特定write()
方法的另一个项目,你可以写:
CellProject2 leftCell = new CellProject2(new LeftCell());
CellProject2 rightCell = new CellProject2(new RightCell());
leftCell.write();
rightCell.write();