有 Java 编程相关的问题?

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

通过相同的方法重写从super运行的扩展类(Java)

我知道这个标题很让人困惑,但我想不出另一种说法

所以,我试图实现的是:我看到一些java程序有一堆子类,它们在它们的超类中有一个方法,并且它们都在调用super方法时运行。 我想做的是,当我调用同步器时,让同步器的任何一个子类运行它们自己的RunAll方法。RunAll方法

我尝试过很多东西,也在谷歌上搜索过很多东西,但我发现这些东西对我不起作用

这就是我拥有的:超级班级

public class Synchroniser 
{
    public Synchroniser()
    {
        RunAll();
    }

    protected void RunAll()
    {
        System.out.println("RunAll");
    }
}

子类:

import org.lwjgl.input.Keyboard;

public class ArrayList extends Synchroniser
{
    public ArrayList()
    {

    }

    public static void Keybind(Info info)
    {
        info.Toggle();
    }

    @Override
    protected void RunAll()
    {
        System.out.println("Ran ArrayList");
    }
}

共 (2) 个答案

  1. # 1 楼答案

    你似乎在寻找观察者模式。你用谷歌搜索过吗?或者是模板方法

    您的代码不匹配(这可能就是它不工作的原因),但您对问题的描述是匹配的

  2. # 2 楼答案

    更新
    根据你最近的评论,@Luchian是正确的。下面是一个应用于您的用例的简单示例——ps:使用现有的JDK类作为您自己的类的名称(ArrayList)不是一个好主意:

    public class Test {
    
        public static void main(String[] args) {
            ArrayList child1 = new ArrayList(1);
            ArrayList child2 = new ArrayList(2);
            Synchronizer sync = new Synchronizer(); //prints RunAll in Parent
            sync.addListener(child1);
            sync.addListener(child2);
            sync.runAll(); //prints RunAll in Parent, in Child 1 and in Child 2
        }
    
        public static interface RunAll {
    
            void runAll();
        }
    
        public static class Synchronizer implements RunAll {
    
            List<RunAll> listeners = new CopyOnWriteArrayList<RunAll>();
    
            public Synchronizer() {
                runAll();
            }
    
            public void addListener(RunAll l) {
                listeners.add(l);
            }
    
            @Override
            public void runAll() {
                System.out.println("RunAll in Parent");
                for (RunAll l : listeners) {
                    l.runAll();
                }
            }
        }
    
        public static class ArrayList implements RunAll {
            private final int i;
    
            private ArrayList(int i) {
                this.i = i;
            }
    
            @Override
            public void runAll() {
                System.out.println("RunAll in Child " + i);
            }
        }
    }