Java类的继承与构造函数:你需要知道的一切

9,389次阅读
没有评论

共计 1523 个字符,预计需要花费 4 分钟才能阅读完成。

Java 是一种面向对象的编程语言,它支持类的继承,即一个类可以从另一个类继承属性和方法。继承可以提高代码的复用性和可扩展性,但也带来了一些问题,比如构造函数的继承。

构造函数是一种特殊的方法,它用于创建类的实例,并初始化类的属性。构造函数的名字必须和类名相同,而且没有返回值。构造函数可以有参数,也可以没有参数,但不能被继承。

那么,如果一个类继承了另一个类,它的构造函数会怎样呢?答案是,子类必须显式地调用父类的构造函数,否则会报错。这是因为子类需要先初始化父类的属性,然后再初始化自己的属性。如果不调用父类的构造函数,父类的属性就没有被赋值,导致程序出错。

子类调用父类的构造函数有两种方式:一种是使用 super 关键字,在子类的构造函数中第一行写上 super(); 或者 super( 参数); 来调用父类的无参或有参构造函数。另一种是使用 this 关键字,在子类的构造函数中第一行写上 this(参数); 来调用子类自己的其他构造函数,而那个构造函数再调用父类的构造函数。

下面是一个简单的例子:

// 定义一个父类 Person
class Person {
  String name;
  int age;
  // 定义一个无参构造函数
  Person() {System.out.println("Person 无参构造函数被调用");
  }
  // 定义一个有参构造函数
  Person(String name, int age) {
    this.name = name;
    this.age = age;
    System.out.println("Person 有参构造函数被调用");
  }
}
// 定义一个子类 Student,继承自 Person
class Student extends Person {
  String school;
  // 定义一个无参构造函数
  Student() {super(); // 调用父类的无参构造函数
    System.out.println("Student 无参构造函数被调用");
  }
  // 定义一个有参构造函数
  Student(String name, int age, String school) {this(name, age); // 调用本类的另一个有参构造函数
    this.school = school;
    System.out.println("Student 有参构造函数被调用");
  }
  // 定义另一个有参构造函数
  Student(String name, int age) {super(name, age); // 调用父类的有参构造函数
    System.out.println("Student 另一个有参构造函数被调用");
  }
}
// 在主方法中创建子类对象并测试
public class Test {public static void main(String[] args) {Student s1 = new Student(); // 创建一个无参对象
    Student s2 = new Student("张三",18,"清华大学"); // 创建一个有参对象
  }
}

运行结果如下:

Person 无参构造函数被调用
Student 无参构造函数被调用
Person 有参构造函数被调用
Student 另一个有参构造函数被调用
Student 有参构造函数被调用 

从结果可以看出,每次创建子类对象时,都会先调用父类的构造函数,然后再调用子类的构造函数。这样可以保证父类和子类的属性都被正确地初始化。

总结一下,Java 中的类在继承时不会继承父类的构造函数,但必须显式地调用父类的构造函数来初始化父类的属性。子类可以使用 super 或 this 关键字来调用父类或本类的构造函数,但必须放在子类构造函数的第一行。这样可以实现类的继承与构造函数的协调。

java 相关课程推荐:java 相关课程

原文地址: Java 类的继承与构造函数:你需要知道的一切

    正文完
     0
    Yojack
    版权声明:本篇文章由 Yojack 于2024-09-20发表,共计1523字。
    转载说明:
    1 本网站名称:优杰开发笔记
    2 本站永久网址:https://yojack.cn
    3 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行删除处理。
    4 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
    5 本站所有内容均可转载及分享, 但请注明出处
    6 我们始终尊重原创作者的版权,所有文章在发布时,均尽可能注明出处与作者。
    7 站长邮箱:laylwenl@gmail.com
    评论(没有评论)