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构造函数的相互调用代码示例


基础教程推荐
猜你喜欢
- Spring MVC数据绑定方式 2023-06-30
- SpringBoot嵌入式Web容器原理与使用介绍 2023-06-17
- java 解决Eclipse挂掉问题的方法 2024-01-10
- SpringBoot 2.5.5整合轻量级的分布式日志标记追踪神器TLog的详细过程 2023-06-17
- jsp hibernate的分页代码第3/3页 2024-01-11
- 关于@MapperScan包扫描的坑及解决 2023-04-16
- 用javascript制作qq注册动态页面 2023-12-16
- JSP servlet实现文件上传下载和删除 2023-07-30
- springboot中request和response的加解密实现代码 2022-12-08
- 详解http请求中的Content-Type 2023-07-31