从继承 class 更改 java 超级 class 变量
Change java super class variable from inherited class
大家,这听起来可能有点奇怪,但我想设置一个超级 class 变量的值,并将其设置为等于子 class 中的值。例如,我有一个名为 SpriteBody
的抽象 class,在一个名为 def
的方法中,我想将变量 bodyType
设置为在 [=16] 中定义的内容=] 扩展 SpriteBody
我怎么能做这样的事情?
我可以反过来做,设置 super class 的值,并在 super class 的方法中使用变量,但如果我能先这样做,我可以写更少的代码方式。
抽象superclass可以声明一个抽象方法供subclass实现。例如:
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 ...
}
}
也就是说,继承有点雷区,这种方法会导致基础 class 和子 classes 之间的复杂耦合,这会使它变得非常困难确保所有子 classes 行为正确并保留正确的不变量。因此,虽然上述内容完全有效,但可能值得再看一看,看看您是否可以使用组合而不是继承来实现您的目标。
大家,这听起来可能有点奇怪,但我想设置一个超级 class 变量的值,并将其设置为等于子 class 中的值。例如,我有一个名为 SpriteBody
的抽象 class,在一个名为 def
的方法中,我想将变量 bodyType
设置为在 [=16] 中定义的内容=] 扩展 SpriteBody
我怎么能做这样的事情?
我可以反过来做,设置 super class 的值,并在 super class 的方法中使用变量,但如果我能先这样做,我可以写更少的代码方式。
抽象superclass可以声明一个抽象方法供subclass实现。例如:
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 ...
}
}
也就是说,继承有点雷区,这种方法会导致基础 class 和子 classes 之间的复杂耦合,这会使它变得非常困难确保所有子 classes 行为正确并保留正确的不变量。因此,虽然上述内容完全有效,但可能值得再看一看,看看您是否可以使用组合而不是继承来实现您的目标。