2012-12-10 104 views
2

我想爲遊戲中的對象定義一些屬性,所以我使用接口來指定它們。解決方法接口實現另一個接口

我創建了一個Interactable接口,但後來我想創建一個Eatable接口,這顯然實現Interactable因爲交互是吃,但我不能這樣做,因爲我無法實現的方法接口。

是否有解決方法?

public interface Interactable { 
    void interact(); 
} 

public interface Eatable implements Interactable { 
    public void eat(); 
    public void interact() { 
     // Obviously, this doesn't work 
     eat(); 
    } 
} 
+0

接口不能實現方法 - 至少從Java 7開始; Java 8可能會爲接口引入[Default Methods](http://cr.openjdk.java.net/~briangoetz/lambda/lambda-state-4.html)。您可能想重新考慮您的設計 - 繼承是將這些行爲添加到對象的最合適方式? – McDowell

回答

1

首先,接口只能擴展其他接口,使Eatable抽象類並實施Interactable

public abstract class Eatable implements Interactable { 
    public void eat(); 
    public void interact() { 
     eat(); 
    } 
} 
+0

與其他答案相同: 謝謝你的快速回答!問題是我想維護Eatable作爲一個接口,因爲我希望Apple能夠實現它,而不是從它延伸(由於java的多重實現:可食用,可移動等) – Hennio

1

接口可以「擴展」其他接口。在這種情況下,我會創建一個抽象基類「食物」或者實現Interactable的東西,其interact()方法調用一個抽象的eat()方法。

+0

感謝您的快速回答!問題是我想將Eatable作爲一個接口來維護,因爲我希望Apple能夠實現它,而不是從它延伸(由於java的多重實現:可食用,可移動等) – Hennio

+0

我不認爲你是可以接受的, d希望Apple直接實施所有這些事情。在大多數情況下,你最好有一個實現食用,可移動等的父母(再次,食品或其他)。這聽起來像你正在尋找一個多重繼承解決方案,但在大多數情況下,有一個更好的 - 如果不那麼明顯 - 要找到單一繼承解決方案。 –