class Abc
{
public Abc()
{
System.out.println("constructor A");
}
}
class Bb extends Abc
{
public Bb()
{
super(); // Calls Abc()
System.out.println("constructor B");
}
}
public class X
{
public static void main(String args[])
{
Bb b = new Bb();
}
}
答案是:
Constructor A
Constructor B
有人能说出这背后的原因吗?
答案 0 :(得分:3)
子类的构造函数(在您的情况下为Bb
)必须在执行自己的构造函数之前调用超类(Abc
的构造函数)。
此代码:
public Bb() {
System.out.println("constructor B");
}
相当于:
public Bb() {
super (); // calls the super-class constructor
System.out.println("constructor B");
}
答案 1 :(得分:1)
当调用派生类的构造函数时,它必须首先构造其超类。如果没有明确地完成(通过指定super
,有或没有任何参数),则使用无参数构造函数隐式完成。换句话说,您的代码相当于:
class Abc {
public Abc() {
System.out.println("constructor A");
}
}
class Bb extends Abc {
public Bb() {
super(); // Calls Abc()
System.out.println("constructor B");
}
}
public class X {
public static void main(String args[]) {
Bb b = new Bb();
}
}
以这种方式表达后,很容易看出打印"constructor A"
的原因,然后"constructor B"
。
答案 2 :(得分:0)
使用super(),调用超类无参数构造函数。使用super(参数列表),将调用具有匹配参数列表的超类构造函数。
现在,如果您查看代码,您将得到答案。