-1

我知道标题很混乱,但我想不出另一种措辞。

所以,我想要实现的目标是:我已经看到一些 Java 程序有很多子类,它们在它们的超类中有一个方法,并且它们都在调用 supers 方法时运行。当我调用 Synchroniser.RunAll 方法时,我想要做的是让 Synchroniser 的单个子类运行它们自己的 RunAll 方法。

我尝试了多种方法,并且在 Google 上搜索了很多,但我发现的内容对我不起作用。

这是我所拥有的: SUPER 类

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");
    }
}
4

2 回答 2

1

好像您正在寻找观察者模式。你用谷歌搜索过吗?或者可能是模板方法

您的代码不匹配(这可能是它不起作用的原因),但您对问题的描述确实如此。

于 2012-05-23T12:41:13.740 回答
0

更新
根据您的最新评论,@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);
        }
    }
}
于 2012-05-23T12:51:48.683 回答