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的解决方案在我的情况下更好,因为它目前更容易实现。这很有趣,我本以为会有更多的工作要实现。耸耸肩,但是嘿,如果它完成了任务!