Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何区分超类数组中的不同子类?_Java_Arrays_Subclass_Superclass_Instanceof - Fatal编程技术网

Java 如何区分超类数组中的不同子类?

Java 如何区分超类数组中的不同子类?,java,arrays,subclass,superclass,instanceof,Java,Arrays,Subclass,Superclass,Instanceof,我的设置如下。 我有一个名为“瓶子”的超类和两个不同的子类,“水”和“苏打”。这里有一个数组,其中包含了数不清的这两个类,我的目标是编写一个方法,只返回其中一个子类的总升值。实现这一目标的最佳方式是什么?据我所知,“instanceof”在这里没有用处 为了澄清,我只想知道用于比较的运算符/方法: if (bottles[0]==soda){ ... } IIRC,instanceof仍然有效 但是,您如何将计数标准的逻辑放在子类方法中?因此,如果你想数一公升的甜饮料在你的瓶子里,

我的设置如下。 我有一个名为“瓶子”的超类和两个不同的子类,“水”和“苏打”。这里有一个数组,其中包含了数不清的这两个类,我的目标是编写一个方法,只返回其中一个子类的总升值。实现这一目标的最佳方式是什么?据我所知,“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未编译,因此我假设数组类型为瓶子没有任何区别。请分享您的尝试和可能的错误消息