-1

タイトルはかなりわかりにくいですが、別の言い方が思い浮かびませんでした。

だから、私が達成しようとしていること: 一部の Java プログラムには、スーパークラスにメソッドを持つサブクラスの負荷があり、スーパーメソッドが呼び出されるとすべて実行されるのを見てきました。私がやろうとしているのは、Synchroniser.RunAll メソッドを呼び出すときに、Synchroniser の単一の子クラスが独自の RunAll メソッドを実行するようにすることです。

私は複数のことを試しましたが、多くのことをグーグルで検索しましたが、見つけたものはうまくいきません。

これが私が持っているものです: 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 に答える