如何在方法内覆盖 Runnable?

How to override Runnable inside a method?

请给我以下问题的建议。

我有 class A & class B 如何在 class 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
                .......
            }
        });
    }

}

我可以在不从 super 复制和粘贴现有代码的情况下向按钮的处理程序(在 myButton 中运行)添加新代码吗?怎么样?

如果您想重新使用逻辑,则必须使用命名 class 实例而不是匿名 class 实例。

例如:

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


    }

}