https://blog.csdn.net/lisainan66/article/details/123697451

前言

为什么子类会自动调用父类的无参构造函数呢?再回答这个问题之前先来说一下两个常见的概念.

继承与构造函数

继承和构造函数是面向对象编程中两个重要的概念,它们在 Java 中起着至关重要的作用。

继承

继承是面向对象编程中的一个核心概念,它允许一个类(称为子类)继承另一个类(称为父类)的属性和方法。通过继承,子类可以复用父类的代码,并且可以在此基础上扩展和定制功能,从而实现代码的重用和层次化组织。在 Java 中,使用关键字 extends 来声明类之间的继承关系。

继承的特点包括:

  1. 代码复用性: 子类可以继承父类的属性和方法,避免了重复编写相似的代码。
  2. 层次化组织: 可以通过继承构建类的层次结构,方便管理和维护代码。
  3. 多态性支持: 继承是实现多态性的基础,在运行时可以根据实际类型调用相应的方法。

构造函数

构造函数是一种特殊类型的方法,它用于创建对象并对对象进行初始化。在 Java 中,构造函数的名称必须与类名完全相同,不返回任何值,且不能被显式调用,而是在创建对象时自动调用。构造函数的作用是初始化对象的状态,为对象的属性赋初值。

构造函数的特点包括:

  1. 对象初始化: 构造函数用于初始化对象的状态,为对象的属性赋初值,确保对象在创建后处于合适的状态。
  2. 与类同名: 构造函数的名称必须与类名相同,这样才能在创建对象时被自动调用。
  3. 重载: 可以定义多个构造函数,它们可以有不同的参数列表,以满足不同的初始化需求。

继承与构造函数的关系

在 Java 中,当创建子类的实例时,子类的构造函数会隐式地调用父类的构造函数,以确保父类的状态得到正确的初始化。如果子类的构造函数没有显式调用父类的构造函数,编译器会自动插入对父类的无参构造函数的调用。这是为了确保父类在子类实例化时能够得到正确的初始化,也符合面向对象编程中继承的特性,确保子类能够正常地继承父类的属性和方法。