2010-03-16 2 views
4

저는 C++ 프로그래머입니다. 아래 예제를 보았을 때이 코드는 site이었습니다. Java에서 호출되는이 기술은 무엇입니까? 어떻게 유용합니까?Java에서이 기술은 무엇입니까?

class Application { 
... 
    public void run() { 
    View v = createView(); 
    v.display(); 
... 
    protected View createView() { 
    return new View(); 
    } 
... 
}  

class ApplicationTest extends TestCase { 

    MockView mockView = new MockView(); 

    public void testApplication { 
    Application a = new Application() { <--- 
     protected View createView() {  <--- 
     return mockView;     <--- whao, what is this? 
     }         <--- 
    };          <--- 
    a.run(); 
    mockView.validate(); 
    } 

    private class MockView extends View 
    { 
    boolean isDisplayed = false; 

    public void display() { 
     isDisplayed = true; 
    } 

    public void validate() { 
     assertTrue(isDisplayed); 
    } 
    } 
} 

답변

19

일반적인 개념이 사용되는 효과적으로 수행 한 어떤 Anonymous Classes

오버 라이딩 (또는 이행), 하위 클래스의 메소드를 응용 프로그램의 새로운 하위 클래스를 만드는 것입니다있다. 하위 클래스는 이름이 없으므로 (익명) 해당 클래스의 인스턴스를 더 이상 만들 수 없습니다.

정의에 필요한 모든 메소드를 구현하는 경우 동일한 기술을 사용하여 인터페이스를 구현하거나 추상 클래스를 인스턴스화 할 수 있습니다.

+0

궁금한데, 어떤 Java 버전이 소개 되었습니까? – Javier

+0

자바 1.1에서 추가되었다고 생각합니다. 10 년 전 언어 학습을 시작했을 때 분명히있었습니다 :-) –

4

다른 사람들은 코드가 테스트 목적으로 모의 객체를 생성한다고 지적했습니다. 그러나 그것은 또한 "익명 내부 클래스"라고하는 무언가를하고 있습니다.