有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在方法内部重写Runnable?

请就以下问题给我一个建议

我有甲级和甲级;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中可运行),而不复制&;从super中粘贴现有代码?怎么做


共 (1) 个答案

  1. # 1 楼答案

    如果要重用逻辑,必须使用命名类实例而不是匿名类实例

    例如:

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