2013-09-27 3 views
-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 имеет класс A, и поэтому он никогда не переходит к анонимному методу, но есть ли способ реализовать такой дизайн?

EDIT: другое: если я попробую objectB.draw(), вызывается анонимный метод!

+0

Если вы удалите ошибку компилятора, она будет работать нормально. В настоящее время ваш класс 'B' не расширяет класс' A'. Таким образом, 'listA.add' не будет компилироваться. –

+0

На самом деле это была ошибка типографии;) –

+3

Это должно сработать. Ваш 'someActionOverriden()' делает что-нибудь видимое? –

ответ

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(); 
    } 
} 
+0

Да, я написал в комментарии, что это уже работает = \ –

+1

@LuiggiMendoza Я не видел этого, прежде чем писать свой ответ. –

Смежные вопросы