2017-07-14 47 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

相關問題