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

Java 两个接口需要实现具有相同名称的方法,java,Java,如果两个接口需要使用相同的名称实现该方法,则会调用该方法()两次。 我需要为两个不同的接口实现两种方法,如何实现这两种方法来做不同的事情 public class MainClass implements BarObj.BarInt, FooObj.FooInt{ MainClass(){ } void trigger() { new BarObj(this); new FooObj(this); } @Ov

如果两个接口需要使用相同的名称实现该方法,则会调用该方法()两次。 我需要为两个不同的接口实现两种方法,如何实现这两种方法来做不同的事情

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

一个类中不能有两个名称相同、参数类型和长度相同的方法。当您实现两个具有相同名称的方法的接口时,您只需要将实现指定给一个方法,该方法充当两个接口的实现对象,因为接口中的方法是空的,永远不会执行。将执行的是已从接口重写的类方法

你不能

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

  • 删除
    实现BarObj.BarInt、FooObj.FooInt
  • 删除
    方法
    方法
  • 更改
    触发器
    方法
  • 应该是这样的

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

    它使用匿名类,您可以在谷歌上搜索更多细节。

    我认为编译器会在实现类中查找一个被重写的方法,即使您有两个包含相同方法的接口。所以你无法区分。可能的重复:创建两个类,一个实现一个接口,另一个实现另一个,并创建一个主类来启动两个对象。我忘记了我在类中使用接口的设计模式的名称。你还可以讨论两种方法的优缺点吗?我认为使用该接口将有助于团队工作,因为我们检查第一行以了解成员使用的是正确的代码,单独使用实现的方法将使文件看起来整洁。但是,如果两个接口使用相同的名称(如我的问题),那么很难找到错误。@MingLeung我的观点是,在您的案例中,使用这些接口的事实是实现细节,因此它不应该是类接口的一部分。即使只有一个接口或不同的方法名,也不应该在类中实现它们。当人们试图节省内存而不创建额外实例时,就会出现这种模式。在现代,这种情况很少发生。仅当您创建此类的大量实例时。