Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java有多个子类,但类型不同_Java_Oop_Inheritance_Architecture - Fatal编程技术网

Java有多个子类,但类型不同

Java有多个子类,但类型不同,java,oop,inheritance,architecture,Java,Oop,Inheritance,Architecture,假设我有一个基类base,它是子类SubA和SubB public class Base(){ public (static?) Animation anim; public Base(Frame[] frames){ CpuIntensiveAnimationCreation(frames); // I need only one 'instance' of Animation Per subclass. // Every

假设我有一个基类
base
,它是子类
SubA
SubB

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?)

    }
看,我不想为我创建的子类的每个实例初始化一个新的动画实例,因为它需要相当长的时间。不过,我确实需要每个子类都有自己的动画。
当然,我可以为每个子类创建一个静态动画,而不使用超类,但这需要大量冗余/复制的代码


我应该如何做到这一点呢?

因此,在子类中需要一个静态字段来保存所描述的动画

现在,您不想复制代码,所以可以将生成动画的方法放在基类的静态方法中


这回答了你的问题吗?

我的建议是在基类中有一个抽象方法
getAnimation()


然后子类可以重写此方法,以返回每个子类的静态动画。

Base
中如何:

您创建了一个构造函数,该构造函数获取子类的一个实例,并代替常规构造检查它是否具有动画属性,如果没有调用该函数,是否为该类静态初始化它?它可以从
Base


这将使责任倒置,并导致基类再次负责动画的存在。

不要使其成为类/子类的一部分。如果有一个

Map<Class<? extends Base>, Animation>

Map1.创建一个抽象方法,用于在基类中获取动画,如getAnim()

2.
让我们在每个子类中将动画设为静态,以便单个子类的所有实例将共享同一个动画实例。因此,通过这样做,每个类都会有自己的动画。

这是一个好主意,但是我仍然必须在子类中保留一个动画变量,这也是我不喜欢的。嗯。。你有选择吗?您希望每个子类有一个动画变量(而不是每个实例,即您希望有一个静态变量),并且您说每个子类的动画都不同。不管怎样,每个子类都会有一个变量,对吗?事实上,我以前也想过这个。我认为Ethan的解决方案在我的情况下更好,因为它目前更容易实现。这很有趣,我本以为会有更多的工作要实现。耸耸肩,但是嘿,如果它完成了任务!