两个接口需要实现具有相同名称的方法

时间:2017-07-14 10:21:52

标签: java

如果两个接口需要实现具有相同名称的方法,则方法()被调用两次。 我需要为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();
    }
}

2 个答案:

答案 0 :(得分:1)

你不能

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

  1. 删除implements BarObj.BarInt, FooObj.FooInt
  2. 删除method方法
  3. 更改trigger方法
  4. 看起来应该是这样的

    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");
            }
        });
    }
    

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

答案 1 :(得分:0)

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