实例化子类对象会不会先去创造一个父类对象


上代码,看问题;

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。
我们所知的抽象类是不可以被实例化的,通过这一点,我们可以否定前面的猜想。

实例化子类,仅仅只是调用了一次服了的构造方法,并非创建了父类实例。

猜你喜欢

转载自www.cnblogs.com/zxwmyll/p/12497226.html