MST

星途 面试题库

面试题:Java构造方法重载与默认构造器:构造器调用与初始化顺序

假设有一个Java类继承体系,父类A有一个带有参数的构造方法和默认构造方法,子类B继承自A且有自己的重载构造方法。请阐述在创建子类B的对象时,构造方法的调用顺序以及成员变量的初始化顺序。同时编写代码验证你的阐述。
34.8万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试
  1. 构造方法调用顺序和成员变量初始化顺序

    • 成员变量初始化顺序:首先初始化父类的成员变量,然后初始化子类的成员变量。
    • 构造方法调用顺序:先调用父类的构造方法(如果父类没有无参构造方法,子类构造方法必须通过super显式调用父类合适的构造方法),再调用子类的构造方法。
  2. 代码示例

class A {
    private int a;

    // 父类带有参数的构造方法
    public A(int a) {
        this.a = a;
        System.out.println("父类A带有参数的构造方法,a = " + a);
    }

    // 父类默认构造方法
    public A() {
        System.out.println("父类A的默认构造方法");
    }
}

class B extends A {
    private int b;

    // 子类B的重载构造方法
    public B(int a, int b) {
        super(a);
        this.b = b;
        System.out.println("子类B带有参数的构造方法,b = " + b);
    }

    public B() {
        System.out.println("子类B的默认构造方法");
    }
}

public class Main {
    public static void main(String[] args) {
        B b1 = new B(1, 2);
        System.out.println("------");
        B b2 = new B();
    }
}

在上述代码中,当创建B类对象时,b1 = new B(1, 2);首先会调用父类A带有参数的构造方法,初始化父类成员变量a,然后初始化子类成员变量b,最后执行子类B带有参数的构造方法的剩余部分。而b2 = new B();会先调用父类A的默认构造方法,然后执行子类B的默认构造方法。