我是一名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);
}
}
}
答案 0 :(得分:19)
在那里使用的一般概念是Anonymous Classes
您实际做的是创建一个新的Application子类,覆盖(或实现)子类中的方法。由于子类是未命名的(匿名),因此无法创建该类的任何其他实例。
只要在定义中实现所有必要的方法,就可以使用相同的技术来实现接口或实例化抽象类。
答案 1 :(得分:4)
正如其他人指出的那样,代码是为了测试而创建模拟对象。但它也在做一些叫做“匿名内心阶级”的事情。