-1

現在、匿名メソッドのオーバーライドと継承に関する奇妙な問題が発生しています。明確に説明するのは難しいので、まずここに私のコードを示します:

public abstract class A {
    public void draw() {
        someAction();
    }
}

public class B extends A {
    // Other methods
}

ArrayList< A > listA = new ArrayList< A >();
B objectB = new B() {
    @Override
    public void draw() {
        someActionOverriden();
    }
}
listA.add( objectB );

for( A item : listA ) {
    item.draw();
}

問題は、draw()匿名でオーバーライドされたメソッドが呼び出されることはありません。これitemは classが原因である可能性があるためA、匿名メソッドには決して行かないと思いますが、この種の設計を実装する方法はありますか?

編集:別のこと:試してみるobjectB.draw()と、匿名メソッドが呼び出されます!

4

1 に答える 1

1

問題は表示されないコードにあります。このコードは機能します:

private static abstract class A {

    public void draw() {
        System.out.println("A");
    }
}

private static class B extends A {
    // Other methods
}

public static void main(String[] args) {
    ArrayList< A> listA = new ArrayList< A>();
    B objectB = new B() {
        @Override
        public void draw() {
            System.out.println("B");
        }
    };
listA.add(objectB);

    for (A item : listA) {
        item.draw();
    }
}
于 2013-09-27T14:30:36.170 に答える