我可以在java 8中使用接口继承属性吗?

时间:2017-10-03 14:40:28

标签: java

我有4个类:“石头”,“海藻”,“鲱鱼”和“长矛”,每个连续的类都继承了前一个类的属性。

类“石头”有坐标,一类“海藻”添加到坐标的生命和生长速度,以及新的海藻(旧的划分)的诞生,在“鲱鱼”中添加了方法吃海藻。

我应该使用普通的java类来表示这种继承还是有另一种方法来进行这种继承?

2 个答案:

答案 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)

组合是继承的良好替代品。

因此,您将拥有其他课程,例如CoordinatesLifeStyleConsumer

并定义你的课程

class Stone{
Coordinates coordinates;
}

class Seaweed{
Coordinates coordinates;
LifeStyle lifestyle;
}

class Sprats{
Coordinates coordinates;
LifeStyle lifestyle;
List<Consumer<?>> consumers;
}

它比继承更好,它取决于你的项目。