【发布时间】:2014-09-25 15:28:22
【问题描述】:
我是一名初级开发人员,我熟悉 java 抽象类背后的理论,以及它们如何让构造函数强制子类设置某些构造函数参数,以及抽象类本身如何无法实例化。但是,在我公司的测试框架中查看一些重构代码时,我有点困惑。
这个抽象类
public abstract class WaitForTestOutcomeThenAssert {
private long maxWait;
public WaitForTestOutcomeThenAssert(long maxWait) {
this.maxWait = maxWait;
}
public void waitForConditionThenAssert() {
...
...
}
protected abstract boolean checkCondition();
}
在此类中被引用:
public class DbWrapper extends AbstractDB {
@Override
public void assertColumnValueNotNull(final String schema, final String table, final String columnName, final String whereClause) {
new WaitForTestOutcomeThenAssert(this.assertionTemporalTolerance) {
@Override
public boolean checkCondition() {
return getColumnValue(schema, table, columnName, whereClause) != null;
}
}.waitForConditionThenAssert();
}
}
由于我们不能实例化一个抽象类,谁能给我解释一下当我们在抽象类构造函数前面使用 new 关键字时会发生什么以及创建了什么?
【问题讨论】:
-
这是一个anonymous class。基本上是一个没有名字的内联类声明。
标签: java oop constructor abstract