我是一名初级开发人员,我熟悉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 classes。在这里,您有一个匿名类声明,该声明扩展了抽象类WaitForTestOutcomeThenAssert并覆盖了checkCondition方法。

关于java - Java抽象类构造函数和new关键字,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26042391/

10-15 18:51