【问题标题】:Two interfaces require to implement the method with the same name两个接口需要实现同名的方法
【发布时间】:2017-12-19 09:56:42
【问题描述】:

如果两个接口需要实现同名的方法,那么method()会被调用两次。 我需要为 2 个不同的接口实现 2 个方法,如何实现它们来做不同的事情?

public class MainClass implements BarObj.BarInt, FooObj.FooInt{

    MainClass(){

    }

    void trigger()
    {
        new BarObj(this);
        new FooObj(this);
    }

    @Override
    public void method() {
        System.out.println("I DONT KNOW WHICH METHOD");
    } 

    public static void main(String[] args) {
        new MainClass().trigger();
    }
}

public class BarObj {
    interface BarInt
    {
        void method();
    }
    public BarObj(BarInt _barInt)
    {
        _barInt.method();
    }
}


public class FooObj {
    interface FooInt
    {
        public void method();
    }
    public FooObj(FooInt _fooInt)
    {
        _fooInt.method();
    }
}

【问题讨论】:

标签: java


【解决方案1】:

你不能

但是要解决你的问题,你可以做下一步。

  1. 删除implements BarObj.BarInt, FooObj.FooInt
  2. 删除method方法
  3. 更改trigger方法

应该是这样的

void trigger()
{
    new BarObj(new BarObj.BarInt(){
        @Override
        public void method() {
            System.out.println("NOW I DO KNOW WHICH METHOD");
            System.out.println("I'm bar");
        }
    });
    new FooObj(new FooObj.FooInt(){
        @Override
        public void method() {
            System.out.println("NOW I DO KNOW WHICH METHOD");
            System.out.println("I'm foo");
        }
    });
}

它使用匿名类,您可以谷歌了解更多详细信息。

【讨论】:

  • 我忘记了我在课堂上使用接口的设计模式的名称。
  • 您能否也讨论一下这两种方式的优缺点?我认为使用该接口对团队合作会有所帮助,因为我们检查第一行以了解成员使用了正确的代码段,并且单独实现方法将使文件看起来整洁。但是,如果两个接口使用相同的名称(就像我的问题),那么这个 bug 将很难找到。
  • @MingLeung 我认为在您的情况下,您使用这些接口的事实是实现细节,因此它不应该是类接口的一部分。即使你只有一个接口或不同的方法名,你也不应该在你的类中实现它们。当人们试图节省内存而不是创建额外的实例时,就会出现这种模式。在现代,这种情况很少见。仅当您创建大量此类的实例时。
【解决方案2】:

在一个类中不能有两个具有相同名称、相同参数类型和长度的方法。当您实现两个具有相同名称的方法的接口时,您需要将实现只提供给一个方法,该方法充当两个接口的实现,因为接口中的方法是空的并且永远不会被执行。将执行的是您已从接口覆盖的类方法。

【讨论】:

    猜你喜欢
    • 2011-12-13
    • 2011-07-26
    • 2015-11-21
    • 2016-07-23
    • 2015-10-19
    • 2022-01-22
    • 2015-03-11
    • 2015-03-23
    • 2013-04-10
    相关资源
    最近更新 更多