public class Parent {
public void test() {
} public Parent() {
test();
} public static void main(String[] args) {
new Child();
}
}
class Child extends Parent {
private int instanceValue = 20; public Child() {
}
public void test() {
System.out.println( "instance value is: " + instanceValue);
}
}
输出结果为什么是 instance value is: 0
public void test() {
} public Parent() {
test();
} public static void main(String[] args) {
new Child();
}
}
class Child extends Parent {
private int instanceValue = 20; public Child() {
}
public void test() {
System.out.println( "instance value is: " + instanceValue);
}
}
输出结果为什么是 instance value is: 0
} 3 public Parent() {
test();
} 4 public void test() {
System.out.println( "instance value is: " + instanceValue);
} 5 private int instanceValue = 20;
除接口以外,初始化一个类之前必须保证其直接超类已被初始化,并且该初始化过程是由 Jvm 保证线程安全的。按你这个例子说的话,超类的初始化应该在给实例变量以前就已经在给超类初始化了.
public class Parent {
public void test() {
System.out.println("Parent_test");
} public Parent() {
System.out.println("Parent");
test();
} public static void main(String[] args) {
new Child();
}
}
class Child extends Parent {
public int instanceValue = 20; public Child() {
System.out.println("Child");
}
public void test() {
System.out.println("Child_test");
System.out.println( "instance value is: " + instanceValue);
}
} 加打印语句,看看执行的顺序,你就明白了
结果:Parent
Child_test
instan value is: 0
Child