2015-04-02 3 views
2

Пожалуйста, дайте мне совет по следующему вопросу.Как переопределить Runnable внутри метода?

У меня есть класс A & класс B Как переопределить Runnable внутри метода foo в классе B?

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

} 

Могу ли я добавить новый код обработчика кнопки (в Runnable в MyButton) без копирования & вставки существующего кода из супер? Как?

+0

что доступ спецификатор из MyButton? – SMA

ответ

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

Я не могу редактировать класс А. Я могу только тронуть его. – Anton

+1

@Anton В этом случае вы не можете переопределить этот Runnable. – Eran

Смежные вопросы