2015-04-02 68 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