В настоящее время я испытываю странную проблему с анонимным методом переопределения и наследования. Трудно четко объяснить, так что для начала здесь является представление моего кода:Анонимный класс не работает
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
, и поэтому он никогда не переходит к анонимному методу, но есть ли способ реализовать такой дизайн?
EDIT: другое: если я попробую objectB.draw()
, вызывается анонимный метод!
Если вы удалите ошибку компилятора, она будет работать нормально. В настоящее время ваш класс 'B' не расширяет класс' A'. Таким образом, 'listA.add' не будет компилироваться. –
На самом деле это была ошибка типографии;) –
Это должно сработать. Ваш 'someActionOverriden()' делает что-нибудь видимое? –