Java构造函数的相互调用,是指一个构造函数中调用了另一个构造函数,以达到代码复用和降低代码重复度的目的。在Java中,构造函数相互调用有两种方式:this和super。
使用this关键字调用另一个构造函数
使用this关键字调用另一个构造函数时,需要满足两个条件:
- this关键字必须位于构造方法中的第一行;
- 被调用的构造方法必须在当前构造方法之前定义。
下面是一个使用this调用另一个构造函数的示例代码:
public class Person {
private String name;
private int age;
public Person() {
this("Unknown", 0);
}
public Person(String name) {
this(name, 0);
}
public Person(int age) {
this("Unknown", age);
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public static void main(String[] args) {
Person person1 = new Person();
Person person2 = new Person("Tom");
Person person3 = new Person(18);
Person person4 = new Person("Tom", 18);
}
}
解释一下上面的代码:
- Person类有四个构造函数,分别是无参、带一个字符串参数name、带一个整数参数age、带一个字符串参数name和一个整数参数age的构造函数;
- 无参构造函数调用带两个参数的构造函数,并传入默认值,即"Unknown"和0;
- 带一个字符串参数name的构造函数调用带两个参数的构造函数,并把age默认值设置为0;
- 带一个整数参数age的构造函数调用带两个参数的构造函数,并把name默认值设置为"Unknown";
- 带一个字符串参数name和一个整数参数age的构造函数直接初始化name和age。
这个示例代码的输出结果为:
Unknown 0
Tom 0
Unknown 18
Tom 18
使用super关键字调用父类构造函数
使用super关键字调用父类构造函数时,需要满足以下条件:
- super关键字必须位于构造方法的第一行;
- 被调用的父类构造方法必须存在,并且参数列表必须与当前构造方法的参数列表相同或可以隐式转换。
下面是一个使用super调用父类构造函数的示例代码:
public class Student extends Person {
private String school;
public Student(String school) {
super();
this.school = school;
}
public Student(String name, int age, String school) {
super(name, age);
this.school = school;
}
public static void main(String[] args) {
Student student1 = new Student("High School");
Student student2 = new Student("Tom", 16, "High School");
}
}
解释一下上面的代码:
- Student类继承自Person类,具有相同的构造函数;
- 无参构造函数调用父类构造函数,并用默认值初始化school;
- 带三个参数的构造函数调用父类构造函数,并用相应参数初始化school。
这个示例代码的输出结果与前一个示例代码相同,不再赘述。
以上就是Java构造函数的相互调用的完整示例攻略。
本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!