MST

星途 面试题库

面试题:Java构造函数链与super关键字的深度应用

在Java类继承体系中,说明构造函数链是如何形成的,super关键字在构造函数中有哪些具体作用,结合实际代码示例讲解如何通过super关键字实现合理的构造函数调用顺序以完成对象的正确初始化。
22.8万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试

构造函数链的形成

在Java类继承体系中,当创建一个子类对象时,会从子类的构造函数开始,沿着继承链向上调用父类的构造函数,直至调用到Object类的构造函数,这样就形成了构造函数链。这是因为每个类的构造函数在执行时,默认会先调用其父类的无参构造函数(如果存在),以确保父类部分的对象先被正确初始化。

super关键字在构造函数中的作用

  1. 调用父类构造函数super关键字最主要的作用是在子类构造函数中显式调用父类的构造函数,可调用父类的无参构造函数或带参数的构造函数。
  2. 访问父类成员:在子类中访问父类被隐藏的成员变量和方法,但这不是在构造函数中的主要应用。

代码示例

class Animal {
    private String name;

    public Animal(String name) {
        this.name = name;
        System.out.println("Animal constructor: " + name);
    }
}

class Dog extends Animal {
    private int age;

    public Dog(String name, int age) {
        // 通过super调用父类的构造函数
        super(name); 
        this.age = age;
        System.out.println("Dog constructor: age " + age);
    }
}

public class Main {
    public static void main(String[] args) {
        Dog dog = new Dog("Buddy", 3);
    }
}

在上述代码中:

  1. Animal类有一个带参数的构造函数,用于初始化name变量。
  2. Dog类继承自Animal类,其构造函数通过super(name)调用了父类Animal带参数的构造函数,先完成父类部分的初始化。
  3. 然后Dog类构造函数再初始化自身特有的age变量。
  4. main方法中创建Dog对象时,构造函数链的调用顺序为:先调用Animal类的构造函数,再调用Dog类的构造函数,从而完成对象的正确初始化。