代码:
public class A {
private String name = "A";
A(){
System.out.println(name);
}
}
public class B extends A {
private String name = "B";
B(){
System.out.println(name);
}
}
public class Demo {
public static void main(String[] args) {
B b = new B();
}
}
首先要知道,所有的对象在创建的时候都会走构造函数,如果没有写,那么他会有一个默认的空的构造函数,在所有的构造函数中的第一行隐藏着代码—-调用父类的构造函数。
所以在创建对象的时候首先进入该类的构造函数,然后进入到其父类的构造函数,一直到父类为Object(也可以说没有父类)时回来,然后执行属性的内容注入,然后在进入到构造函数执行其余代码。
以上代码的顺序为:
1. 进入B的构造函数
2. 进入A的构造函数
3. 给A的属性name赋值为A
4. 回到A的构造函数打印A属性名字为A执行完毕
5. 回到B中为B的属性name赋值
6. 回到B中的构造函数打印B属性的名字为B