我想根据类的类型使用不同值的相同静态变量。
所以我会
public class Entity
{
public static Bitmap sprite;
public void draw(Canvas canvas, int x, int y)
{
canvas.drawBitmap(sprite, x, y, null);
}
}
public class Marine extends Entity
{
}
public class Genestealer extends Entity
{
}
然后在我的主程序中去:
Marine.sprite = // Load sprite for all instances of Marine
Genestealer.sprite = // Load sprite for all instances of Genestealer
我不想在类的每个实例中存储相同的 Sprite 。每种类型的类(class)我都想要一个。我想继承静态 Sprite 变量和绘制 Sprite 的绘制函数。但我不希望 Genstealer Sprite 覆盖海洋 Sprite 。
这可能吗?
我该怎么做?
最佳答案
使用抽象方法:
public class Entity
{
public abstract Bitmap getSprite();
public void draw(Canvas canvas, int x, int y)
{
canvas.drawBitmap(getSprite(), x, y, null);
}
}
public class Marine extends Entity
{
public Bitmap getSprite() {
return /*the sprite*/;
}
}
如果您愿意,getSprite 返回的 Sprite 可以是静态的。这种方法的优点:
您不能(轻易地)忘记在子类中包含 Sprite ,因为如果您不实现抽象方法,编译器会报错。
它很灵活。假设一名海军陆战队员在“升级”后看起来应该有所不同。只需更改 Marine 的 getSprite 方法以将关卡考虑在内。
这是这类事情的标准 OO 习语,因此查看代码的人不会摸不着头脑。
关于java - 我可以为每种不同类型的继承类拥有不同的静态变量副本吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1448092/