java - 我可以为每种不同类型的继承类拥有不同的静态变量副本吗

标签 java inheritance static-variables

我想根据类的类型使用不同值的相同静态变量。

所以我会

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/

相关文章:

具有字符串和第二类的 __new__ 和 __init__ 的 Python 多重继承

PHP 设计模式 - 继承与适配器模式?

java - 跨类处理静态变量

java - 检查forEach lambda循环Java 8中List的范围

java - 手动设置 Swing JInternalFrame lnf

java - 如何使用并行流在 Java 中查找第 n 个素数

Swift:结构中的静态字符串变量变成中文字符

java - 设置 LD_LIBRARY_PATH =`pwd` 的 Shell 脚本在 Java 中不起作用

Java/安卓 : Return a class name through a method

python - 列出同一类中的静态属性时 Python 中的 NameError