上代码,看问题;
class A {
static {
System.out.print("1");
}
public A() {
System.out.print("2");
}
}
class B extends A {
static {
System.out.print("a");
}
public B() {
System.out.print("b");
}
}
public class Xxoo {
public static void main(String[] ars) {
B b = new B();
}
}
如上代码打印结果为:1a2b。
也就是说,子类初始化的时候是调用了父类的构造方法的。
那么是否可以认为:实例化子类对象会不会先去创造一个父类对象
?
带着这个问题,鄙人修改了代码。
abstract class A {
static {
System.out.print("1");
}
public A() {
System.out.print("2");
}
}
class B extends A {
static {
System.out.print("a");
}
public B() {
System.out.print("b");
}
}
public class Xxoo {
public static void main(String[] ars) {
B b = new B();
}
}
如上代码的结果还是:1a2b。
我们所知的抽象类是不可以被实例化的,通过这一点,我们可以否定前面的猜想。