2013-09-27 2 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 제 답변을 쓰기 시작하기 전에 그것을 보지 못했습니다. –

관련 문제