我对此代码感到有点困惑:
class A{
class B{
}
}
class C extends A.B{
C(A a){
a.super();
}
}
这是什么意思:" a.super();" ? 之前我认为超级链接到她的父类,但" super()" - 链接到父母的构造函数,但真正的A类避风港是一个父类(不要介意对象......),那么在这种情况下它是什么意思?
大家好。
答案 0 :(得分:5)
super()调用超类的默认构造函数。如果没有定义构造函数,则类总是有一个不可见的默认构造函数,它不需要任何参数。在这种情况下,您正在调用Object类的构造函数。
答案 1 :(得分:3)
它是合格的超类构造函数调用。
来自JLS 1.8
显式构造函数调用语句可以分为两种:
备用构造函数调用以关键字this开头(可能以显式类型参数开头)。它们用于调用同一类的备用构造函数。
超类构造函数调用以关键字super(可能以显式类型参数开头)或Primary表达式开头。它们用于调用直接超类的构造函数。超类构造函数调用可以进一步细分:
不合格的超类构造函数调用以关键字super开头(可能以显式类型参数开头)。
- 醇>
合格的超类构造函数调用以Primary表达式开头。它们允许子类构造函数显式指定新创建的对象关于直接超类(第8.1.3节)的直接封闭实例。当超类是内部类时,这可能是必要的。