Java 实现多个接口的类的类型

Java 实现多个接口的类的类型,java,interface,Java,Interface,我目前正在尝试编写一些类,遇到以下问题: 我正在尝试编写一个类,该类从两个接口实现一些功能 interface IA { public void doSomething(); } interface IB { public void doSomethingToo(); } 我有两个类实现这些接口: class FooA implements IA, IB{ } class FooB implements IA, IB{ } 我有没有办法做到这一点: public <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();
public thismclassimgonnause=returnEitherFooAOrFooB();
这是一个典型的例子;
这是一个典型的例子。doSomethingToo();

您可以创建一个抽象基类或另一个扩展IA和IB的接口

abstract class Base implements IA, IB{}

做一个新的界面

public interface IAandB extends IA, IB 

并让FooA和FooB实现它。

这可能不是您想要的,但您可以创建第三个接口来扩展这两个接口:

interface IAandB extends A, B {}
然后
FooA
FooB
将直接实现
IAandB
,而不是
IA
IB

class FooA implements IAandB{}
class FooB implements IAandB{}
然后,您可以将
thisClassImGonnaUse
声明为
IAandB
类型:

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

如果一个类有可能实现
IA
IB
,并且这一事实在概念上对您正在处理的问题领域是有意义的,那么这个类就只有这样一个
IAB

interface IAB extends IA, IB { /* nothing */ }
确定它在你的情况下是否有意义可能很简单,比如问自己IAB的好名字是什么?如果您能对此给出满意的答案,您只需添加该接口即可。如果不是,那么你俩的位置合适吗

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

行将是
FooA
FooB
的方法(或这两种方法的基类)。这样,您就不必对实现接口的类的性质进行强制转换或猜测(这可能会变得无效或以后处理起来很麻烦)。

啊,太棒了,这确实是我想要的。谢谢:)所以
thisClassImGonnaUse
应该两种方法都可用。我不明白这为什么行不通。也许我错过了什么。嗯,是的,有点。
thisClassImGonnaUse
有什么类型:)好的,我想我知道了。类型需要是一个接口,2个接口不能指定为。好吧,是的,我也在考虑这个。不过我有一个问题,其中一个接口(比如说
IA
)来自不同的库。谢谢您的回答。您选择使用抽象类,与使用接口有什么区别?这可能是语义上的,但我真的不知道什么更可取。在这种情况下,没有什么真的!在您的例子中,因为您没有基类,所以使用抽象类也是一种可能,只是想把它扔掉。我想说的是一个抽象基类或另一个接口,并给出了这两个接口的例子,但我看到了关于接口方法的例子的其他答案,所以我没有提供这方面的例子。
thisClassImGonnaUse.doSomething();
thisClassImGonnaUse.doSomethingToo();