-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()匿名覆盖的方法永远不会被调用。我想这可能是因为itemis of 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 回答