标题说明了一切.
我在每个派生类中都有一个独特的颜色,它被声明为静态.
就像这样:
class CandyBlue extends Candy
{
public static final String color = "blue";
}
class CandyRed extends Candy
{
public static final String color = "red";
}
Run Code Online (Sandbox Code Playgroud)
然后我有一个类型为Candy的物体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;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
该Candy班没有一个成员的颜色,所以我不需要将它张贴.Candy类的唯一重要性是出于多态性的目的.上面的代码没有尝试过,所以如果我不确定它是否相应地运行.我怎样才能打印出糖果的颜色?
假设Candy该类有一个color变量,你可以通过说明来打印糖果的颜色candy.color.
话虽这么说,语句candy.color总是会打印分配给类中color变量的值Candy.这是因为运行时多态仅适用于实例方法.static使用引用类型在编译时解析字段(无论是否).
您需要对所有类进行以下更改:
Candy一成不变.您可以在此答案中阅读有关如何使类不可变的内容.还要添加一个getColor方法CandyCandy不可变的,你可以用所需的颜色实例化它们.例如:candies[0][0] = new Candy("blue");Candy每个都没有必要有一个子类color.相反,您可以简单地Candy为每个新对象实例化一个新对象color.例如candies[0][1] = new Candy("red");color的Candy说candy.getColor()话虽这么说,你也可以考虑使用一个enum被调用的Candy而不是一个Candy类,因为看起来你想要的只是一个String常量,代表一个color:
public enum Candy {
RED,BLUE,GREEN;
}
Run Code Online (Sandbox Code Playgroud)