2015-04-02 80 views
2

請給我一個關於以下問題的建議。如何覆蓋方法內的Runnable?

我有A類& B類 如何覆蓋類B中的foo方法中的Runnable?

class A {  
    //some code 
    .......  
    protected void foo() { 
     //some code 
     .......   
     //adding click listener to instance of MyButton 
     myButton.show(new Runnable(){ 
      @Override 
      public void run() { 
       ....... 
      } 
     });   
     //some code 
     ....... 
    }  
    //some code 
    .......  
} 

class B extends A {  
    @Override 
    protected void foo() { 
     super.foo();    
     //some NEW code 
     .......   
     //adding click listener to instance of MyButton 
     myButton.show(new Runnable(){ 
      @Override 
      public void run() { 
       //Copied&Pasted old code 
       .......     
       //NEW code 
       ....... 
      } 
     }); 
    } 

} 

我可以不復制&從超級粘貼現有代碼的新代碼添加到按鈕的處理程序(可運行在myButton的)?怎麼樣?

+0

什麼是myButton的訪問符? – SMA 2015-04-02 09:04:09

回答

2

如果要重新使用該邏輯,則必須使用命名類實例,而不是匿名類實例。

例如:

class A { 
    ... 
    static class ButtonLogic implements Runnable 
    { 
     public void run() {...} 
    } 

    protected void foo() { 
     //adding click listener to instance of MyButton 
     myButton.show(new A.ButtonLogic()); 
      ....... 
    } 
} 

則B可以改寫邏輯:

class B extends A { 

    @Override 
    protected void foo() { 
     super.foo(); 

     //some NEW code 
     ....... 

     //adding click listener to instance of MyButton 
     myButton.show(new A.ButtonLogic(){ 
      @Override 
      public void run() { 
       super.run(); 
       ....... 

       //NEW code 
       ....... 
      } 
     }); 


    } 

} 
+0

我無法編輯A班。我只能聽它。 – Anton 2015-04-02 09:17:00

+1

@Anton在這種情況下,您無法重寫該Runnable。 – Eran 2015-04-02 09:18:25