匿名类不起作用

时间:2013-09-27 14:21:03

标签: java anonymous-class

我目前遇到了匿名方法覆盖和继承的奇怪问题。很难清楚地解释,所以从这里开始代表我的代码:

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属于类A,所以它永远不会进入匿名方法,但有没有办法实现这种设计?

编辑:另一件事:如果我尝试objectB.draw(),则会调用匿名方法!

1 个答案:

答案 0 :(得分: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();
    }
}