我有这个抽象类:
public abstract class Pile {
protected Deck d=new Deck();
public Pile(){
}
public abstract void PrintCard();
public abstract boolean IsEmpty();
}
我希望d
字段及其值对于Pile
(及其子类)类型的所有对象都是相同的。
我希望这种情况发生,因为我删除卡片并将它们添加到卡座中,因此它必须只有一个卡座。
答案 0 :(得分:2)
最简单的方法就是制作d
static
(它也值得制作final
,这样任何子类都不能用不同的实例替换它):
public abstract class Pile {
protected static final Deck d=new Deck();
public abstract void PrintCard();
public abstract boolean IsEmpty();
}
但是,像这样的静态变量可能会有问题,尤其是从测试的角度来看。如果您需要一些Pile
来拥有一个Deck
而其他人有不同的Deck
(例如JonK的例子),那么以后更改也很棘手。
您也可以将Deck
作为参数注入:
public abstract class Pile {
protected final Deck d;
public Pile(Deck d) {
this.d = d;
}
public abstract void PrintCard();
public abstract boolean IsEmpty();
}
现在,您可以在构建Pile
时注入您选择的值(例如模拟)。第二种解决方案是我选择的解决方案。