1.调用本类中重载的构造方法:
构造方法可以通过this()
来调用本类中其他重载的构造方法。但是,这个调用必须位于构造方法的第一行,也就是说,它是构造方法中的第一个语句。这是因为构造方法需要先完成一些初始化工作,然后才能调用其他构造方法继续初始化。
示例:
public class MyClass {
private int x;
private int y;
public MyClass(int x) {
this(x, 0); // 调用另一个构造方法
}
public MyClass(int x, int y) {
this.x = x;
this.y = y;
}
}
2.调用父类的构造方法:
构造方法可以通过super()
来调用其父类的构造方法。同样地,这个调用也必须位于构造方法的第一行。如果没有显式地调用父类的构造方法,编译器会默认调用父类的无参数构造方法(如果存在的话)。如果父类没有无参数的构造方法,并且子类也没有显式地调用父类的其他构造方法,那么编译时会出现错误。
示例:
public class ParentClass {
public ParentClass(int value) {
// 父类的构造方法
}
}
public class ChildClass extends ParentClass {
public ChildClass(int value) {
super(value); // 调用父类的构造方法
// 其他初始化代码
}
}
如果父类没有无参数的构造方法,并且子类也没有显式地调用父类的其他构造方法,那么子类在编译时会报错,因为它找不到默认的父类构造方法来调用。
在Java中,this()
和super()
在构造方法中的使用是互斥的,也就是说,一个构造方法中不能同时调用this()
和super()
。此外,如果子类构造方法既没有显式调用this()
(即没有调用本类中的其他构造方法),也没有显式调用super()
(即没有调用父类的构造方法),那么编译器会隐式调用父类的无参数构造方法(如果存在)。