标题说明了一切。

我在每个派生类中都有唯一的颜色,并且将其声明为静态。

就像这样:

    class CandyBlue extends Candy
   {
      public static final String color = "blue";
   }



 class CandyRed extends Candy
   {
      public static final String color = "red";
   }


那么我有一个糖果类型的对象S

class CandyFrenzy
{
   Candy candies[][];
   public CandyFrenzy()
   {
    candies = new Candy[4][4];
    candies[0][0] = new CandyBlue();
    candies[0][1] = new CandyRed();
    ....
   }

   public static void main(String args[])
   {
     CandyFrenzy candyFrenzy = new CandyFrenzy();
      Candy candy;
     for(int a=0; a<4; a++)
     {
       for(int b=0; b<4; b++)
       {
          candy = candies[a][b];
          //print the color of the candy;
       }
     }
   }
}


Candy类没有成员颜色,所以我不需要发布它。 Candy类的唯一重要性是出于多态目的。
上面的代码未尝试过,因此如果即时通讯无法确定它是否相应运行。
我如何打印糖果的颜色?

最佳答案

假设Candy类具有color变量,则可以说candy.color来打印糖果的颜色。

就是说,语句candy.color总是要打印分配给color类中Candy变量的值。这是因为运行时多态仅适用于实例方法。在编译时使用引用类型解析字段(是否为static)。

您需要对所有课程进行以下更改:


使Candy不变。您可以在this答案中了解如何使类不可变。还要在getColor中添加Candy方法
一旦使Candy不可变,就可以使用所需的颜色实例化它们。例如。 :candies[0][0] = new Candy("blue");
每个Candy不需要有一个color子类。相反,您可以为每个新的Candy实例化一个新的color对象。例如。 candies[0][1] = new Candy("red");
您可以通过说出color来打印Candycandy.getColor()


话虽如此,您也可以考虑使用称为enumCandy而不是Candy类,因为看起来您想要的只是一个表示color的String常量:

public enum Candy {
    RED,BLUE,GREEN;
}

10-06 03:16