面试题答案
一键面试-
构造方法调用顺序和成员变量初始化顺序:
- 成员变量初始化顺序:首先初始化父类的成员变量,然后初始化子类的成员变量。
- 构造方法调用顺序:先调用父类的构造方法(如果父类没有无参构造方法,子类构造方法必须通过
super
显式调用父类合适的构造方法),再调用子类的构造方法。
-
代码示例:
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
的默认构造方法。