Java 如何区分超类数组中的不同子类?
我的设置如下。 我有一个名为“瓶子”的超类和两个不同的子类,“水”和“苏打”。这里有一个数组,其中包含了数不清的这两个类,我的目标是编写一个方法,只返回其中一个子类的总升值。实现这一目标的最佳方式是什么?据我所知,“instanceof”在这里没有用处 为了澄清,我只想知道用于比较的运算符/方法:Java 如何区分超类数组中的不同子类?,java,arrays,subclass,superclass,instanceof,Java,Arrays,Subclass,Superclass,Instanceof,我的设置如下。 我有一个名为“瓶子”的超类和两个不同的子类,“水”和“苏打”。这里有一个数组,其中包含了数不清的这两个类,我的目标是编写一个方法,只返回其中一个子类的总升值。实现这一目标的最佳方式是什么?据我所知,“instanceof”在这里没有用处 为了澄清,我只想知道用于比较的运算符/方法: if (bottles[0]==soda){ ... } IIRC,instanceof仍然有效 但是,您如何将计数标准的逻辑放在子类方法中?因此,如果你想数一公升的甜饮料在你的瓶子里,
if (bottles[0]==soda){
...
}
IIRC,instanceof仍然有效
但是,您如何将计数标准的逻辑放在子类方法中?因此,如果你想数一公升的甜饮料在你的瓶子里,你的水应该返回0,但你的苏打水应该返回真正的公升。因为子类知道自己最好的一面,所以最好让它们直接给出答案。不要破坏封装 IIRC,instanceof仍然有效
if(bottles[i] instanceof Soda) {
return bottles[i].getRealLiter();
}
else if(bottles[i] instanceof Water) {
return 0;
}
但是,您如何将计数标准的逻辑放在子类方法中?因此,如果你想数一公升的甜饮料在你的瓶子里,你的水应该返回0,但你的苏打水应该返回真正的公升。因为子类知道自己最好的一面,所以最好让它们直接给出答案。不要破坏封装 通常,如果您可以控制瓶子类,但仍然需要在代码中使用
instanceof
,那么您的设计就会出现问题
if(bottles[i] instanceof Soda) {
return bottles[i].getRealLiter();
}
else if(bottles[i] instanceof Water) {
return 0;
}
interface Bottle{
void addLiters(LiterCalculator calculator);
}
文字计算器看起来像这样
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); }
}
因此,您的流不再负责瓶子实例的不同计算。通常,如果您可以控制瓶子类,并且仍然需要在代码中使用
instanceof
,则您的设计存在问题
interface Bottle{
void addLiters(LiterCalculator calculator);
}
文字计算器看起来像这样
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); }
}
因此,您的流不再负责瓶子实例的不同计算。您使用哪种语言?这些类是如何实现的?太少详细信息。为什么您认为“instanceof无用”您可以将其用作瓶子[0]waterSoda instanceof water未编译,因此我假设数组类型为瓶子没有任何区别。请分享您的尝试和可能的错误消息您使用的是哪种语言?这些类是如何实现的?详细信息太少。为什么您认为“instanceof没有用处”您可以将其用作瓶子[0]instanceof waterSoda instanceof water未编译,因此我假设数组类型为瓶子没有任何区别。请分享您的尝试和可能的错误消息