2011-12-16 64 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(){} 
} 

与否?