package test;
public class Father {
static{
System.out.println("I am Father");
}
public Father() {
super();
System.out.println("Father Create");
}
}
package test;
public class Son extends Father{
static{
System.out.println("I am Son");
}
public Son() {
super();
System.out.println("Son Create");
}
public Son(int s) {
super();
System.out.println("Son Create with param: int");
}
public static void main(String[] args) {
Son s = new Son();
}
}
package test;
public class GrandChild extends Son {
static{
System.out.println("I am GrandChild");
}
public GrandChild() {
super();
System.out.println("GrandChild Create");
}
public GrandChild(int s) {
super(s);
System.out.println("GrandChild Create with param: int");
}
public GrandChild(long s) {
this((int)s);
System.out.println("GrandChild Create with param: long");
}
public static void main(String[] args) {
GrandChild gc = new GrandChild(3l);
}
}
运行以下代码
public static void main(String[] args) {
GrandChild gc = new GrandChild();
}
结果为:
I am Father
I am Son
I am GrandChild
Father Create
Son Create
GrandChild Create
运行以下代码
public static void main(String[] args) {
GrandChild gc = new GrandChild(3);
}
结果为
I am Father
I am Son
I am GrandChild
Father Create
Son Create with param: int
GrandChild Create with param: int
运行以下代码
public static void main(String[] args) {
GrandChild gc = new GrandChild(3L);
}
结果为:
I am Father
I am Son
I am GrandChild
Father Create
Son Create with param: int
GrandChild Create with param: int
GrandChild Create with param: long
以上:
1 类中的静态对象先于static{}执行
2 static{}中的代码是在构建类对象之前执行的
3 构造子类的时候是按照先父后子的顺序执行的
4 如果在子的构造函数中并没有使用显式的调用父类的构造函数(使用super),则执行无参构造函数。
5 如果使用this(),则会先调用this(),再调用下面的代码(此时父类别的默认构造函数不再执行,而会根据执行this()执行相应的父构造函数)