继承时,我们往往会关注属性和静态属性和构造方法之间的初始化顺序是什么样的
答案是:
先static;(创建对象后)然后父类属性,父类构造方法;最后子类属性,子类构造方法。
package beetle;
class Insect {
int i = 9;
int j=prt("Insect j initialized");
Insect() {
prt("i = " + i + ", j = " + j);
j = 39;
}
static int x1 =
prt("static Insect.x1 initialized");
static int prt(String s) {
System.out.println(s);
return 47;
}
}
public class Beetle extends Insect {
int k = prt("Beetle.k initialized");
Beetle() {
prt("k = " + k);
prt("j = " + j);
}
static int x2 =
prt("static Beetle.x2 initialized");
static int prt(String s) {
System.out.println(s);
return 63;
}
public static void main(String[] args) {
prt("Beetle constructor");
Insect b = new Beetle();
//System.out.println("X1="+x1+",X2="+x2);
}
}
输出:
static Insect.x1 initialized
static Beetle.x2 initialized
Beetle constructor
Insect j initialized
i = 9, j = 47
Beetle.k initialized
k = 63
j = 39