实现多个接口的类的类型

时间:2011-06-22 19:35:31

标签: java interface

我目前正在尝试编写一些类,我遇到了以下问题:

我正在尝试编写一个从两个接口实现某些功能的类

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();

4 个答案:

答案 0 :(得分:9)

做一个新界面

public interface IAandB extends IA, IB 

并改为实现FooD和FooD。

答案 1 :(得分:1)

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

abstract class Base implements IA, IB{}

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

答案 2 :(得分:1)

这可能不是您想要的,但您可以创建一个扩展它们的第三个界面:

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();

答案 3 :(得分:0)

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

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

确定如果 它在你的情况下是否有意义可能就像问自己什么是IAB的好名字一样简单?如果你能想出一个令人满意的回答这个问题,你可以添加那个界面。如果不是,那么适合你的两个

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

行是FooAFooB(或这两者的基类)的方法。这样您就不必对实现接口的类的性质进行强制转换或猜测(以后可能会变得无效或麻烦)。