java - 多个类实现相同接口的问题
问题描述
我无法理解多个类何时实现相同的接口,在我使用具体类作为 DI 之前,但在搜索和阅读之后,我被告知它应该取决于抽象。所以这是我的问题:
interface SomeInterface{
public void doSomething();
}
我们有两个实现接口的类:
class FirstClass implements SomeInterface{
@Override
public void doSomething(){
System.out.print("First class is doing something");
}
}
class SecondClass implements SomeInterface {
@Override
public void doSomething() {
System.out.print("Second class is doing something");
}
}
现在我有一个客户,我想使用第一类和第二类的方法:
class ClientClass {
private SomeInterface someInterface;
public ClientClass(SomeInterface someInterface) {
this.someInterface = someInterface;
}
public void testMethod() {
this.someInterface.doSomething();
}
}
现在,当我实例化客户端类时,我只能在第一个或第二个构造函数中传递一个类,并且该方法将启动,但是如果我想要两种方法怎么办?这个设计有什么问题?
解决方案
接口的至少两个优点是 1) 为实现类的公共方面提供可由多个类实现的抽象方法tie together
,以及 2) 允许一种机制,这些接口和其他接口可以通过以下方式实现同一个类(与单一继承模型相反)。
如果您的不同类具有相同的含义和返回类型,我认为没有理由不能全部实现相同的接口。也可以实现其他接口(并且接口可以扩展其他接口)。
如果每个类以不同的方式使用相同的接口,那么强烈建议根据需要创建一个新接口。否则你的代码会让未来的维护者非常困惑。如果按如下所述使用它也可能无意中导致问题(这是共享接口的典型情况)。
但是想象一下需要一个getTotal()
方法的五个不同类的列表。声明一个名为的接口Results
并让这些类实现它。然后可以将每个实例放在 aList<Results>
中,然后可以使用调用该方法的每个引用进行迭代getTotal()
。
推荐阅读
- python - 具有多个列表的字典中的字数
- python - 如何使用 Resnet 架构对自定义标记的图像集进行分类?
- terminal - 从终端/Crontab 执行时,= 是否等于空格?
- ffmpeg - 将图像序列转换为视频的可扩展解决方案
- visual-studio-code - 在 vscode 中调试 .net core webapi 时无法读取 appsettings.json
- angular - let-item="item" 和 let-item$="item$" 有什么区别?
- r - 如何避免在 ggplot2(使用 geom_point)的绘图线上绘制观察结果?
- python - 使用python迭代时在0到9之间插入一个零
- java - 如何在 android studio 中使用 setSupportActionBar 功能?
- javascript - 可以在草稿电子邮件上激活 Outlook 任务窗格应用程序吗?