簡體   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