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