标题说明了一切。
我在每个派生类中都有唯一的颜色,并且将其声明为静态。
就像这样:
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
来打印Candy
的candy.getColor()
话虽如此,您也可以考虑使用称为enum
的Candy
而不是Candy
类,因为看起来您想要的只是一个表示color
的String常量:
public enum Candy {
RED,BLUE,GREEN;
}