Java多个子类,但类型不同

时间:2012-07-04 19:15:54

标签: java oop inheritance architecture

假设我有一个基类Base,它的子类SubASubB

public class Base(){

    public (static?) Animation anim;

    public Base(Frame[] frames){

        CpuIntensiveAnimationCreation(frames);

        // I need only one 'instance' of Animation Per subclass.
        // Every different TYPE of subclass needs it's own Animation instance.
        // A subclass can share one Animation, among multiple subclass-instances. (static?)

    }

请参阅,我不想为我所创建的子类的每个实例初始化一个新的Animation实例,因为它需要相当长的时间。但是我确实需要每个子类拥有它自己的动画 我可以在每个子类中使用静态动画而不使用超类,但这需要大量冗余/复制代码。

我该怎么做?

5 个答案:

答案 0 :(得分:3)

不要让它成为类/子类的一部分。

会更容易
Map<Class<? extends Base>, Animation>

创建一个动画注册表作为自己的类,并让它包含类到动画的映射。

答案 1 :(得分:2)

我的建议是在基类中使用抽象方法getAnimation()

子类可以覆盖此方法,以返回每个子类的静态动画。

答案 2 :(得分:1)

因此,您需要在子类中使用静态字段来保存您描述的动画。

现在,您不想复制代码,因此您可以将该方法放在Base类的静态方法中生成该动画。

这会回答你的问题吗?

答案 3 :(得分:1)

Base

怎么样?

你创建一个构造函数来获取Subclass的实例,而不是正常的构造检查它是否有动画属性,如果没有调用该函数,则静态地为该类初始化它?它可以从Base

中的抽象方法继承它

反转责任并导致Base类再次负责动画就在那里。

答案 4 :(得分:0)

1。在Base类中创建一个抽象方法来获取类似getAnim()的动画

<强> 2 让我们在每个子类中动画静态,因此单个子类的所有实例将共享相同的动画实例。因此,通过这样做,每个类都将拥有自己的动画。