标题说明了一切。
我在每个派生类中都有唯一的颜色,并且将其声明为静态。
就像这样:
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
不可变。您可以在此答案中了解如何使类不可变。还要在中添加一个getColor
方法Candy
Candy
不可变成为可能,就可以使用所需的颜色实例化它们。例如:candies[0][0] = new Candy("blue");
Candy
每个不需要一个子类color
。相反,您可以Candy
为每个new实例化一个新对象color
。例如candies[0][1] = new Candy("red");
color
aCandy
的candy.getColor()
话虽如此,您也可以考虑使用被enum
调用方式,Candy
而不是使用Candy
类,因为看起来您想要的只是一个表示一个的String常量color
:
public enum Candy {
RED,BLUE,GREEN;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句