在 Java 中,子类继承父类,并可以调用父类的构造方法。下面我们详细分析子类调用父类构造方法的机制:

1. 子类构造方法的执行顺序

  • 首先,子类对象创建时,会自动调用父类的无参构造方法,即使子类构造方法中没有显式使用 super() 调用父类构造方法。
  • 接着,子类会执行自己的构造方法。

2. 使用 super() 调用父类构造方法

  • 子类可以在自己的构造方法中使用 super() 显式调用父类的构造方法,并指定参数。
  • 如果子类构造方法中没有使用 super(),编译器会自动在子类构造方法的第一行添加 super(),默认调用父类的无参构造方法。

3. 常见错误理解

  • 错误理解 A: 子类会先调用父类中无参构造方法,再调用子类自己的构造方法。
    • 正确理解: 子类构造方法的执行顺序是:父类无参构造方法 -> 子类构造方法
  • 错误理解 B: 创建子类对象时,先调用子类自己的构造方法,然后再调用父类的无参构造方法。
    • 正确理解: 子类构造方法的执行顺序是:父类无参构造方法 -> 子类构造方法
  • 错误理解 C: 子类定义了自己的构造方法,就不能调用父类的构造方法。
    • 正确理解: 子类定义了自己的构造方法,仍然可以通过 super() 调用父类的构造方法。

4. 代码示例

class Parent {
    Parent() {
        System.out.println("Parent 无参构造方法");
    }
    Parent(String name) {
        System.out.println("Parent 有参构造方法: " + name);
    }
}

class Child extends Parent {
    Child() {
        super("Child"); // 调用父类的有参构造方法
        System.out.println("Child 无参构造方法");
    }
    Child(int age) {
        System.out.println("Child 有参构造方法: " + age);
    }
}

public class Main {
    public static void main(String[] args) {
        Child child1 = new Child(); // 调用 Child 无参构造方法,会先调用 Parent 有参构造方法
        Child child2 = new Child(10); // 调用 Child 有参构造方法
    }
}

总结:

  • 子类在创建对象时会自动调用父类的无参构造方法。
  • 子类可以在自己的构造方法中使用 super() 显式调用父类的构造方法。
  • 子类定义了自己的构造方法,仍然可以调用父类的构造方法。

希望本文能够帮助你更好地理解子类调用父类构造方法的机制。

Java 子类调用父类构造方法详解

原文地址: https://www.cveoy.top/t/topic/nwsi 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录