首页 > 解决方案 > 多个类实现相同接口的问题

问题描述

我无法理解多个类何时实现相同的接口,在我使用具体类作为 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();
    }
}

现在,当我实例化客户端类时,我只能在第一个或第二个构造函数中传递一个类,并且该方法将启动,但是如果我想要两种方法怎么办?这个设计有什么问题?

标签: javaoopinterfaceabstraction

解决方案


接口的至少两个优点是 1) 为实现类的公共方面提供可由多个类实现的抽象方法tie together,以及 2) 允许一种机制,这些接口和其他接口可以通过以下方式实现同一个类(与单一继承模型相反)。

如果您的不同类具有相同的含义和返回类型,我认为没有理由不能全部实现相同的接口。也可以实现其他接口(并且接口可以扩展其他接口)。

如果每个类以不同的方式使用相同的接口,那么强烈建议根据需要创建一个新接口。否则你的代码会让未来的维护者非常困惑。如果按如下所述使用它也可能无意中导致问题(这是共享接口的典型情况)。

但是想象一下需要一个getTotal()方法的五个不同类的列表。声明一个名为的接口Results并让这些类实现它。然后可以将每个实例放在 aList<Results>中,然后可以使用调用该方法的每个引用进行迭代getTotal()


推荐阅读