这种技术在Java中被称为什么?

时间:2010-03-16 01:05:28

标签: java anonymous-class

我是一名C ++程序员,当我看到下面的例子时,我正在阅读site。这种技术在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);
    }
  }
}

2 个答案:

答案 0 :(得分:19)

在那里使用的一般概念是Anonymous Classes

您实际做的是创建一个新的Application子类,覆盖(或实现)子类中的方法。由于子类是未命名的(匿名),因此无法创建该类的任何其他实例。

只要在定义中实现所有必要的方法,就可以使用相同的技术来实现接口或实例化抽象类。

答案 1 :(得分:4)

正如其他人指出的那样,代码是为了测试而创建模拟对象。但它也在做一些叫做“匿名内心阶级”的事情。