SpriteBody
的抽象类,在一个名为def
的方法中,我想将变量bodyType
设置为Block
中定义的扩展类。 SpriteBody
我该怎么办?
我可以反过来这样做,设置一个超类的值,并在超类的方法中使用该变量,但如果我能以第一种方式执行它,我可以编写更少的代码。
答案 0 :(得分:1)
抽象超类可以声明子类要实现的抽象方法。例如:
public abstract class SpriteBody {
private BodyType bodyType;
protected abstract BodyType determineBodyType();
public void def() {
bodyType = computeBodyType();
}
}
public class Block extends SpriteBody {
@Override
protected BodyType determineBodyType() {
// ... TODO ...
}
}
也就是说,继承是一个雷区,这种方法可能导致基类和子类之间的复杂耦合,这使得很难确保所有子类的行为正确并且保留正确的不变量。因此,尽管上述内容完全有效,但可能值得再看看是否可以使用合成而不是继承来实现目标。