我有4个类:“石头”,“海藻”,“鲱鱼”和“长矛”,每个连续的类都继承了前一个类的属性。
类“石头”有坐标,一类“海藻”添加到坐标的生命和生长速度,以及新的海藻(旧的划分)的诞生,在“鲱鱼”中添加了方法吃海藻。
我应该使用普通的java类来表示这种继承还是有另一种方法来进行这种继承?
答案 0 :(得分:2)
在这种情况下,当语义上两个对象之间没有真正的关系时,我会阻止直接使用类继承。
如果您希望表达这些类具有共同行为的某些方面这一事实,您可能希望使用表达这些属性集的接口。这是因为类可以实现多个接口,因此您可以选择要在每个类中实现哪些接口。这也带来了更大的灵活性,因为不需要对不同的,非严格相关的功能进行线性排序。
示例:您可以
public interface WorldObject {...}
public interface Organism extends WorldObject {...}
public interface Plant extends Organism {...}
public interface Animal extends Organism {...}
public interface Eater<T> {...}
public class Stone implements WorldObject {...}
public class Seaweed implements Plant {...}
public class Sprat implements Animal, Eater<Seaweed> {...}
等
答案 1 :(得分:1)
组合是继承的良好替代品。
因此,您将拥有其他课程,例如Coordinates
,LifeStyle
,Consumer
并定义你的课程
class Stone{
Coordinates coordinates;
}
class Seaweed{
Coordinates coordinates;
LifeStyle lifestyle;
}
class Sprats{
Coordinates coordinates;
LifeStyle lifestyle;
List<Consumer<?>> consumers;
}
它比继承更好,它取决于你的项目。