java 初始化其子类必先初始化其父类啥意思

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 初始化其子类必先初始化其父类啥意思相关的知识,希望对你有一定的参考价值。

因为子类的构造函数里面必然调用了父类的构造函数
一般来说,子类的构造函数里面会隐式的调用父类的构造函数,就是那个super.什么什么的
因为隐式调用,所以看不到。但是是存在的。如果你显式的调用那么必须放在第一行。
而且从理论上来说,既然你要初始化子类,子类会继承父类的一部分属性和方法,如果你不初始化父类,那么子类岂不是没有意义。继承不了父类的属性和方法。
所以,初始化子类必须要初始化父类
参考技术A 因为子类的构造函数中最先执行的就是super();这个方法用于调用父类的构造函数,如果程序员没有明确标明调用父类的哪个构造函数,则系统默认调用父类的空构造函数。调用构造函数的过程也就是初始化的过程,希望你明白。本回答被提问者采纳 参考技术B   继承问题:
  如果一个a类继承了另一个类b,那么a就为b的子类,b为a的父类。
  在类加载的时候,加载到a时,编译器发现它是b的子类,所以就去先下载它的父类b。加载过程就包含初始化变量加载静态方法等等。加载完b之后再去加载类a。
  所以java 初始化其子类必先初始化其父类。
参考技术C 在Java机制中,创建子类的时候子类的构造器会调用父类的构造函数,即先生成一个父类对象,就算你在定义子类的构造函数时没有用super()创建父类的对象,它也会默认调用super()函数。
也就是说子类对象中实际是包含父类对象的,只不过对外不可见而已。
这是我自己对Java机制的理解,可能也不很准确,希望能帮到你。
参考技术D 有了父类,你才能让子类继承啊。。。。

Java类什么情况下被初始化?

 

1.创建类的实例(new 的方式)。访问某个类或接口的静态变量,或者对该静态变量赋值,调用类的静态方法

2.反射的方式

3.当初始化一个类的时候,如果发现其父类还没有进行初始化,则需先触发其父类的初始化。

4.Java虚拟机启动时被标明为启动类的类,直接使用java.exe命令来运行某个主类(包含main方法的那个类)

5.当使用 JDK 1.7 的动态语言支持时,如果一个 java.lang.invoke.MethodHandle 实例最后的解析结果 REF_getStatic、REF_putStatic、REF_invokeStatic 的方法句柄,并且这个方法句柄所对应的类没有进行过初始化,则需先触发其初始化。

 

Java类的加载是动态的,它并不会一次性将所有类全部加载后再运行,而是保证程序运行的基础类(像是基类)完全加载到jvm中,至于其他类,则在需要的时候才加载。这当然就是为了节省内存开销。

 

以上是关于java 初始化其子类必先初始化其父类啥意思的主要内容,如果未能解决你的问题,请参考以下文章

Java虚拟机 对象创建流程初始化流程

java 对象的初始化流程(静态成员静态代码块普通代码块构造方法)

类加载

深入理解Java虚拟机——类加载的时机

深入理解Java虚拟机——类加载的时机

spring 中的 abstract="true" 是啥意思?