我目前遇到了匿名方法覆盖和继承的奇怪问题。很难清楚地解释,所以从这里开始代表我的代码:
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()
,则会调用匿名方法!
答案 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();
}
}