2011-12-16 65 views
3

我試圖谷歌這一個,但我找不到一個可以接受的答案。接口不一致,當你讓一個類實現2個或更多的接口,而這些接口是互不兼容的?例如:Java:什麼是接口不一致?

public interface Lion() 
{ 
    public void eat(); 
} 

public interface Tiger() 
{ 
    public void eat(); 
} 

public class Liger implements Lion, Tiger 
{ 
    public void eat(); //Problem: How does it eat? Like a lion or tiger? 
} 

我正確或離開基地?

+0

不幸的是沒有直接的方法來解決這個問題。相關的主題:http://stackoverflow.com/questions/6211070/class-inheriting-from-several-interfaces-having-same-method-signature和http://stackoverflow.com/questions/2598009/method-name-collision -in-interface-implementation-java – adatapost 2011-12-16 02:56:52

回答

3

在Java中,這樣保證了它編譯成相同功能的兩種接口方法返回相同的「類型」 ......因此,在這種情況下,接口不一致可以參考:

  1. 當你實現兩種方法來實現完全相同的功能,不同的副作用或不同的基本假設/算法,這些方法不能在方法簽名中表達出來......也就是說,「看起來」相同但「做」不同的兩種方法概念性任務。還有(非特定於Java的)GUI內涵,其中用戶體驗令人困惑,相似的組件被用於不同的任務(或者反之,同一個任務由不同的GUI組件觸發)。

到1的解決方案是爲具有更具表現力的界面,或更精確的函數名(例示更復雜的界面:也許獅子和老虎應提供食物,其能夠在一個進食的或更多不同的方式)。

0

我想以後的事更有意義,

public interface Animal{ 
    public void eat(); 
} 

public class Lion implements Animal{ 
    //code 
} 

public class Tiger implements Animal{ 
    //code 
} 

public class Liger extends Lion /*or Tiger*/{ 
    public void eat(){} 
} 

與否?