class Test1 {
static {System.out.println("静态块");}
int i=10;
boolean b=false;
char c = 'A'; {System.out.println(i);}
Test1() {
super();//Object
print();
i = 20;
}
void print() {
System.out.println(b);
System.out.println(c);
}
}
class Test2 extends Test1 {
{System.out.println("子类成员块");}
int i=30;
static {System.out.println("子类静态块");}
Test2() {
super();//Test1
print();
i=40;
}
void print() {
System.out.println(i);
}
}
public class Test4 {
public static void main(String args[]) {
System.out.println(new Test2().i);
}
}
static {System.out.println("静态块");}
int i=10;
boolean b=false;
char c = 'A'; {System.out.println(i);}
Test1() {
super();//Object
print();
i = 20;
}
void print() {
System.out.println(b);
System.out.println(c);
}
}
class Test2 extends Test1 {
{System.out.println("子类成员块");}
int i=30;
static {System.out.println("子类静态块");}
Test2() {
super();//Test1
print();
i=40;
}
void print() {
System.out.println(i);
}
}
public class Test4 {
public static void main(String args[]) {
System.out.println(new Test2().i);
}
}
先初始化父类静态块
执行:static {System.out.println("静态块");} 1、输出: 静态块
然后子类静态块:static {System.out.println("子类静态块");} 2、输出: 子类静态块
父类成员块{System.out.println(i);} 3、输出: 10
父类构造函数调用:
由于多态会调用子类的print()方法;而此时子类的成员变量还没有初始化:
4、输出: 0
子类成员初始化:{System.out.println("子类成员块");} 5、输出: 子类成员块
子类构造函数调用:
调用print()方法,并且i赋值为40
6、输出: 30
System.out.println(new Test2().i);
7、输出: 40
是的,它由于多态调用于子类的print方法