class Aa {
public Aa(String a,String b) { }
}
public class Bb extends Aa {
public Bb(String a,String b) {
super(a,b);
}
public static void main(String args []) {
Aa a = new Aa("Hi","Tom");
Aa b = new Bb("Hi","Bart");
}
}
如果去掉super(a,b);则会出现编译错误,提示未定义隐式超级构造函数 Aa()。必须显式调用另一个构造函数
此时要么加super(a,b),要么给Aa写无参构造函数。
我不理解!!!????
public Aa(String a,String b) { }
}
public class Bb extends Aa {
public Bb(String a,String b) {
super(a,b);
}
public static void main(String args []) {
Aa a = new Aa("Hi","Tom");
Aa b = new Bb("Hi","Bart");
}
}
如果去掉super(a,b);则会出现编译错误,提示未定义隐式超级构造函数 Aa()。必须显式调用另一个构造函数
此时要么加super(a,b),要么给Aa写无参构造函数。
我不理解!!!????
而Java规范中是说明这样表示调用父类的无参数构造函数
同时,Java还规定了如果一个类没有显式声明构造函数,则认为存在一个无参的构造函数所以这里你必须显式调用super(a,b)这个有参数的构造函数,或者在Aa中显式声明一个无参的构造函数上述都是Java中对没有显式声明的规范罢了。
Aa b = new Bb("Hi","Bart");
时,先调Aa的构造函数,初始化父类的一实例,再调Bb的构造函数(其中再调用一次Aa的构造函数)是吗?