2010-03-16 90 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 2010-03-16 02:15:56

+0

我相信它是在Java 1.1中添加的。当我在10年前开始学习这门语言时,它确实存在:-) – 2010-03-16 02:22:05

4

正如其他人指出的代码是为测试目的创建模拟对象。但它也在做一些名为“匿名内在阶级”的活动。