2017-07-14 70 views
0

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

我想编译器会在实现类中寻找一个重写的方法,即使你有2个包含相同方法的接口。所以你不能区分。 – Truthira

+2

可能的重复:https://stackoverflow.com/questions/2801878/implementing-two-interfaces-in-a-class-with-same-method-which-interface-method –

+0

做两个类,一个实现一个接口,另一个实现另一个,并创建一个主类,启动两个对象 – Eliethesaiyan

回答

0

在一个类中不能有两个具有相同名称和相同参数类型和长度的方法。当你实现两个具有相同名称的方法的接口时,你只需要给实现赋予一个方法,这个方法的作用就是为两个接口实现,因为接口中的方法是空的并且永远不会被执行。将执行的是你的类方法,它已经被接口覆盖了。

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

它使用匿名类,你可以谷歌更多细节。

+0

我忘记了我在课堂上使用该接口的设计模式的名称。 –

+0

你还可以讨论两种方式的优缺点吗?我认为使用界面对团队工作会有帮助,因为我们检查第一行以了解成员使用的是正确的代码片段,并且单独实施的方法将使文件看起来整洁。但是,如果两个接口使用相同的名称(如我的问题),那么该错误将很难找到。 –

+0

@MingLeung我认为在你的情况下,你使用这些接口的事实是实现细节,所以它不应该是类接口的一部分。即使你只有一个接口或不同的方法名称,你也不应该在你的课堂上实现它们。当人们试图节省内存并且不创建额外的实例时,就会出现这种模式。在现代,情况很少。只有当你创建了这个类的大量实例。 – talex

相关问题