在Java中,如果子类中出现了无参构造器(不管是你手动编写的,还是系统自动生成的)时,父类中必须提供一个无参的构造器,但是如果你在子类的无参构造器中调用父类的带参构造器,则父类无须提供一个默认的无参构造器。示例如下:
1、子类中出现无参构造器,子类中super()可以省略,编译器默认自动添加super()到子类的构造器第一行:
package com.js.demo01;
public class Child extends Base{
public Child() {
// super();
}
public Child(int a) {
super(a);
}
Child child = new Child();
Child child2 = new Child(1000);
}
class Base{
int a ;
public Base(){
}
public Base(int a) {
this.a = a;
}
}
上面的程序中如果注释掉Base类的无参构造器,则会编译不通过。
2、如果子类的无参构造器调用的是父类的带参构造器,则父类可以不提供无参构造器:
package com.js.demo01;
public class Child extends Base{
public Child() {
super(1);
}
public Child(int a) {
super(a);
}
Child child = new Child();
Child child2 = new Child(1000);
}
class Base{
int a ;
public Base(int a) {
this.a = a;
}
}