java中的构造器中super是用来对于父类中的构造器进行调用的,this是对于本类中的其他构造器进行调用,或者调用对应的元素,this调用其他构造器需要放在构造器的第一行,super也需要放在第一行,这也造成super不能和this一起调用构造器
package test;
public class aaa {
public static void main(String[] args) {
}
}
class bb{
private int l;
private int age;
private String s;
public bb(int l, int age) {
this.l = l;
this.age = age;
}
public bb(int l,String s) {
this(s);
this.l = l;
}
public bb(String s) {
this.s = s;
}
}
在父类中定义构造器之后,父类中的默认无参构造器将不能使用,此时下图中的cc类中如果将构造器中的super和对应的参数删除,也会报错
public class aaa {
public static void main(String[] args) {
}
}
class bb{
private int l;
private int age;
public bb(int l, int age) {
this.l = l;
this.age = age;
}
}
class cc extends bb{
private int high;
public cc(int l, int age, int high) {
super(l, age);
this.high = high;
}
}
在java中,子类的构造器是默认带有一个super()的,所有才会有前面的报错
package test;
public class aaa {
public static void main(String[] args) {
new cc(1);
}
}
class bb{
private String s;
public bb() {
System.out.println("无参构造器被调用");
}
}
class cc extends bb{
private int high;
public cc(int high) {
this.high = high;
}
}
输出结果