Java构造函数的相互调用,是指一个构造函数中调用了另一个构造函数,以达到代码复用和降低代码重复度的目的。在Java中,构造函数相互调用有两种方式:this和super。
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构造函数的相互调用的完整示例攻略。
沃梦达教程
本文标题为:Java构造函数的相互调用代码示例
基础教程推荐
猜你喜欢
- JavaWeb 实现验证码功能(demo) 2024-04-14
- springboot下使用shiro自定义filter的个人经验分享 2024-02-27
- Java中EnvironmentAware 接口的作用 2023-01-23
- 是否适合从javabean类更新数据库? 2023-11-04
- 深入理解约瑟夫环的数学优化方法 2024-03-07
- 使用Java和WebSocket实现网页聊天室实例代码 2024-02-25
- Java编写实现窗体程序显示日历 2023-01-02
- 运用El表达式截取字符串/获取list的长度实例 2023-08-01
- JSP 动态树的实现 2023-12-17
- Java+mysql实现学籍管理系统 2023-03-16
