繁体   English   中英

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

[英]Can I use interfaces for inheritance of properties in java 8?

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

类“石头”有坐标,类“海藻”在坐标上加了寿命和生长速度,以及新海藻的诞生(分裂老),在“鲱鱼”中加了吃海藻的方法。

我应该使用普通的java类来表达这种继承还是有另一种继承方式?

在这种情况下,当语义上两个对象之间没有真正的关系时,我不鼓励直接使用类继承。

如果您希望表达这些类在其行为的某些方面具有共同点这一事实,您可能希望使用表达这些属性集的接口。 这是有效的,因为一个类可以实现多个接口,因此您可以选择在每个类中实现哪个。 这也引入了更大的灵活性,因为不需要对不同的、不严格相关的功能进行线性排序。

例子:你可以有

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> {...}

等等。

组合是很好的替代继承。

所以你会有额外的类,比如Coordinates , LifeStyle , Consumer

并定义你的类

class Stone{
Coordinates coordinates;
}

class Seaweed{
Coordinates coordinates;
LifeStyle lifestyle;
}

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

它是否比继承更好的选择,这取决于您的项目。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM