Java构造函数的相互调用代码示例

2023-12-11java编程
77

Java构造函数的相互调用,是指一个构造函数中调用了另一个构造函数,以达到代码复用和降低代码重复度的目的。在Java中,构造函数相互调用有两种方式:this和super。

使用this关键字调用另一个构造函数

使用this关键字调用另一个构造函数时,需要满足两个条件:

  1. this关键字必须位于构造方法中的第一行;
  2. 被调用的构造方法必须在当前构造方法之前定义。

下面是一个使用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关键字调用父类构造函数时,需要满足以下条件:

  1. super关键字必须位于构造方法的第一行;
  2. 被调用的父类构造方法必须存在,并且参数列表必须与当前构造方法的参数列表相同或可以隐式转换。

下面是一个使用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构造函数的相互调用的完整示例攻略。

The End

相关推荐

一文带你掌握Java8中Lambda表达式 函数式接口及方法构造器数组的引用
Lambda表达式是Java 8中引入的新特性之一,它是一个匿名函数,可以捕获参数并表现为一个代码块,而不像方法一样需要一个固定的名称。它主要用于传递行为或代码块以及事件处理等操作。...
2023-12-11 java编程
30

基于Java 谈回调函数
下面为您详细讲解基于Java的回调函数。...
2023-12-11 java编程
21

java equals函数用法详解
在Java中,equals()是用来比较两个对象是否相等的函数。equals()方法是Object类中的方法,因此所有Java类都包含equals()方法。在默认情况下,equals()方法比较对象的引用地址是否相同,即两个对象是否是同一个实例。但是,我们可以覆盖equals()方法,来定义自...
2023-12-11 java编程
63

JavaWeb学习笔记分享(必看篇)
JavaWeb是Java在Web领域的应用,是目前非常热门的技术之一。但是JavaWeb涉及到的技术非常广泛,初学者很容易迷失方向。本文总结了JavaWeb的基础知识,为初学者提供了一份学习笔记分享,希望能够帮助大家快速入门。...
2023-12-11 java编程
8

Java中replace、replaceAll和replaceFirst函数的用法小结
在Java编程中,字符串操作是很常见的,而替换字符串是其中常用的操作之一。Java提供了三种函数用于替换字符串:replace、replaceAll和replaceFirst。这篇文章将为您详细介绍它们的用法。...
2023-12-11 java编程
121

基于Java中进制的转换函数详解
进制是数学中一种表示数值大小的方法,常见的进制有10进制、2进制、16进制等。...
2023-12-11 java编程
45