我如何区分超类数组中的不同子类?
How do i differentiate different subclasses in a array of the superclass?
我的设置如下。
我有一个名为 "bottles" 的超类和 2 个不同的子类,"water" 和 "soda"。有一个数组充满了无数的这两个,我的目标是编写一个方法 returns 这些子类中只有一个的总升值。实现这一目标的最佳方法是什么?据我了解 'instanceof' 在这里没有用。
澄清一下,我只想知道operator/method用来比较什么:
if (bottles[0]==soda){
...
}
IIRC,instanceof 仍然有效。
但是,如何将计数升标准的逻辑放在子类方法中?因此,如果你想计算瓶中甜饮料的升数,你的水应该 return 0 但你的苏打水应该 return 真正的升。既然子类自己最清楚,最好让他们直接给你答案。不要破坏封装。
if(bottles[i] instanceof Soda) {
return bottles[i].getRealLiter();
}
else if(bottles[i] instanceof Water) {
return 0;
}
一般来说,如果您控制了 Bottle 类,但您仍然需要在代码中使用 instanceof
,那么您的设计就有问题。
interface Bottle{
void addLiters(LiterCalculator calculator);
}
LiterCalculator 看起来像这样,
interface LiterCalculator{
public addWater(int liters);
public addSoda(int liters);
//so on
}
而SodaBottle负责自己添加;
class SodaBottle implements Bottle {
private int liters;
public void addLiters(LiterCalculator calculator) { calculator.addSoda(liters); }
}
因此您的流程不再负责 Bottle 实例的不同计算。
我的设置如下。 我有一个名为 "bottles" 的超类和 2 个不同的子类,"water" 和 "soda"。有一个数组充满了无数的这两个,我的目标是编写一个方法 returns 这些子类中只有一个的总升值。实现这一目标的最佳方法是什么?据我了解 'instanceof' 在这里没有用。
澄清一下,我只想知道operator/method用来比较什么:
if (bottles[0]==soda){
...
}
IIRC,instanceof 仍然有效。
但是,如何将计数升标准的逻辑放在子类方法中?因此,如果你想计算瓶中甜饮料的升数,你的水应该 return 0 但你的苏打水应该 return 真正的升。既然子类自己最清楚,最好让他们直接给你答案。不要破坏封装。
if(bottles[i] instanceof Soda) {
return bottles[i].getRealLiter();
}
else if(bottles[i] instanceof Water) {
return 0;
}
一般来说,如果您控制了 Bottle 类,但您仍然需要在代码中使用 instanceof
,那么您的设计就有问题。
interface Bottle{
void addLiters(LiterCalculator calculator);
}
LiterCalculator 看起来像这样,
interface LiterCalculator{
public addWater(int liters);
public addSoda(int liters);
//so on
}
而SodaBottle负责自己添加;
class SodaBottle implements Bottle {
private int liters;
public void addLiters(LiterCalculator calculator) { calculator.addSoda(liters); }
}
因此您的流程不再负责 Bottle 实例的不同计算。