2

我对这段代码有点困惑:

class A{
    class B{
    }
}

class C extends A.B{
    C(A a){
        a.super();
    }
}

这是什么意思:“a.super();” ? 之前我认为 super - 链接到她的父类,但是“super()” - 链接到父类的构造函数,但实际上 A 类没有父类(不介意 Object ...),那么 super 是什么意思在这种情况下?

谢谢大家。

4

2 回答 2

5

super() 调用超类的默认构造函数。如果你不定义构造函数,你的类总是有一个不可见的默认构造函数,它不需要任何参数。在这种情况下,您正在调用 Object 类的构造函数。

于 2013-07-11T14:05:15.490 回答
3

它是合格的超类构造函数调用。

JLS 1.8

显式构造函数调用语句可以分为两种:

  1. 备用构造函数调用以关键字 this 开头(可能以显式类型参数开头)。它们用于调用同一类的备用构造函数。

  2. 超类构造函数调用以关键字 super(可能以显式类型参数开头)或 Primary 表达式开头。它们用于调用直接超类的构造函数。超类构造函数调用可以进一步细分:

  3. 不合格的超类构造函数调用以关键字 super 开头(可能以显式类型参数开头)。

  4. 合格的超类构造函数调用以 Primary 表达式开头。它们允许子类构造函数显式指定新创建的对象相对于直接超类的直接封闭实例(第 8.1.3 节)。当超类是内部类时,这可能是必要的。

于 2013-07-11T14:04:13.437 回答