4

我对这条线有点怀疑:

匿名类不能定义构造函数

那么,为什么我们还可以使用以下语法定义一个匿名类:

new class-name ( [ argument-list ] ) { class-body }
4

3 回答 3

9

您不是在匿名类中定义构造函数,而是从超类调用构造函数。

您不能为匿名类添加适当的构造函数,但是,您可以执行类似的操作。即初始化块。

public class SuperClass {
   public SuperClass(String parameter) {
       // this is called when anonymous class is created
   }
}

// an anonymous class is created and instantiated here
new SuperClass(parameterForSuperClassConstructor) {
   {
      // this code is executed when object is initialized
      // and can be used to do many same things as a constructors
   }

   private void someMethod() {

   }

}
于 2009-11-18T18:48:59.180 回答
3

您的示例创建了 的匿名子类class-name并且不允许您创建特定于匿名类的构造函数。您提供的参数列表与class-name构造函数的参数列表相同。

于 2009-11-18T18:50:09.007 回答
1

这意味着存在class-name使用定义的构造函数调用的抽象类。您正在匿名类中使用该构造函数,类似于在子类的构造函数中使用 super()。

于 2009-11-18T18:52:36.233 回答