2011-06-22 53 views
8

目前,我想要寫一些類和我來進行的跨下列問題:Type類的一個實現多個接口

我想寫一個實現從兩個接口

interface IA { 
public void doSomething(); 
} 

interface IB { 
public void doSomethingToo(); 
} 
一些功能的類

我有兩個類實現這些接口:

class FooA implements IA, IB{ 

} 

class FooB implements IA, IB{ 

} 

有我的方式,我可以做到這一點:

public <type> thisClassImGonnaUse = returnEitherFooAOrFooB(); 
thisClassImGonnaUse.doSomething(); 
thisClassImGonnaUse.doSomethingToo(); 
+0

所以'thisClassImGonnaUse'應該有兩種方法可用。我不明白爲什麼這不起作用。也許我錯過了一些東西。 –

+0

嗯,是的,有點兒。 'thisClassImGonnaUse'有什麼類型:) –

+0

好吧,想想我明白了。該類型必須是一個接口,並且2個接口不能被指定爲。 –

回答

9

做一個新的接口

public interface IAandB extends IA, IB 

再拍接口FooA和FooB改爲實現它。

+0

啊,太棒了,那確實是我在找的東西。謝謝你:) –

1

,你可以創建一個抽象基類或同時擴展IA和IB

abstract class Base implements IA, IB{} 

class FooA extends Base implements IA, IB{...} 
+1

感謝您的回答。你選擇使用抽象類,與使用接口有什麼不同?這可能是語義的,但我無法弄清楚什麼是最好的。 –

+0

在這種情況下,什麼都沒有!在你的情況下,因爲你沒有基類,所以使用抽象類也是可能的,只是想把它扔到那裏。我打算說'抽象基類或另一個接口'並給出了兩個例子,但我看到了其他答案和接口方法的例子,所以我沒有提供一個例子。 –

1

這可能不是你想要什麼,但你可以做一個擴展他們兩人的第3接口:

interface IAandB extends A, B {} 

然後FooAFooB將直接實現IAandB而不是IAIB

class FooA implements IAandB{} 
class FooB implements IAandB{} 

然後您可以聲明thisClassImGonnaUse的類型爲IAandB

public IAandB thisClassImGonnaUse = returnEitherFooAorFooB(); 
thisClassImGonnaUse.doSomething(); 
thisClassImGonnaUse.doSomethingToo(); 
0

如果有這樣的可能性:一類implementes IAIB,這一事實使概念意義的你在工作中的問題域,則只是有一個IAB這樣

interface IAB extends IA, IB { /* nothing */ } 

確定如果它在你的情況下很有意義可能就像問自己一樣簡單IAB的好名字是什麼?如果你能想出一個滿意的答案,你可以添加該接口。如果,那麼你的兩個

thisClassImGonnaUse.doSomething(); 
thisClassImGonnaUse.doSomethingToo(); 

線在正確的地方將是FooAFooB的方法(或基類這兩種)。通過這種方式,您不必對實現接口的類的性質進行轉換或猜測(這可能會變得無效或稍後處理)。

+0

好吧,是的,我也在想。我有一個問題,但其中一個接口(可以說'IA')來自不同的庫。 –