class parent
{
private static String name=method2();
public parent() {
System.out.println("构造1");
}
static{
System.out.println("static 1");
}
public void method1()
{
System.out.println("i am parent method!");
}
public static String method2()
{
System.out.println("i am parent static method!");
return "parent";
}
}
class child extends parent
{
static{
System.out.println("static 2");
}
private static String name=method2();
public child() {
System.out.println("构造2");
}
public void method1()
{
System.out.println("i am child method!");
}
public static String method2()
{
System.out.println("i am child static method!");
return "child";
}
}
public class TestParentAndChild {
public static void main(String[] args) {
parent parent=new parent();
child child=new child();
child.method1();
}
}
运行结果:
i am parent static method!
static 1
构造1
static 2
i am child static method!
构造1
构造2
i am child method!
parent parent=new parent()
首先加载父类,静态方法按照顺序加载,所以是 i am parent static method! static 1 最后才是构造函数
child child=new child();
类只加载一次,所以这个时候直接去加载子类就可以了 static 2 i am child static method!
此时这个构造还会执行一次父类构造函数,然后才是子类构造函数
child.method1();
最后调用这个子类对象的方法