Bootstrap

JavaSE面向对象_继承之子类对象初始化

什么是子类对象初始化

对于一个普通类,JVM通过类加载了解它,从而能够完成创建该类对象,或一些其他操作。在有了继承的概念后,在继承中,子类会继承父类的成员,使用子类对象可以直接访问从父类中继承过来的成员,在创建子类对象时这些父类的成员变量也需要赋值,那么这些成员变量如何出现、如何赋值等等就是我们要研究的子类对象初始化的问题。

 

创建子类对象的类加载情况

创建子类对象,会触发父类的类加载,而且类加载的顺序是“先父后子”,先完成父类的类加载,再开始子类的类加载。

触发子类类加载,会优先类加载父类,而且从顶层父类开始,向下完成类加载。

JDK源码中的类也是需要类加载的,实际上源码中的类,例如String、Object这种,在启动JVM的时候,就已经类加载了,轮不到启动main方法去类加载它。

当前学习到的四种类加载时机:

  1. new对象
  2. 启动main方法
  3. 访问静态成员
  4. 触发子类类加载,优先类加载父类

 

创建子类对象时的情况

会创建几个对象

new关键字创建子类对象,只会在堆上创建一个子类对象,不会创建父类对象。在使用new关键字创建对象时,写的是创建什么对象,就只会创建这个类的对象,而不会创建它的父类对象。

 

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;