子类的构造函数为什么总要super

 我来答
知道小小白
2017-06-12 · TA获得超过543个赞
知道小有建树答主
回答量:909
采纳率:70%
帮助的人:306万
展开全部

这个就要说说java的类加载机制了。

先介绍就是java的类初始化。这4种情况会类初始化:

  1. 遇到new、getstatic、putstatic或invokestatic这4条字节码指令时,如果类没有进行过初始化,则需要先触发其初始化。生成这4条指令的最常见的Java代码场景是:使用new关键字实例化对象的时候,读取或设置一个类的静态字段(被final修饰、已在编译期把结果放入常量池的静态字段除外)的时候,以及调用一个类的静态方法的时候。

  2. 使用java.lang.reflect包的方法对类进行反射调用的时候,如果类没有进行过初始化,则需要先触发其初始化。

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

  4. .当虚拟机启动时,用户需要指定一个要执行的主类(包含main()方法的那个类),虚拟机会先初始化这个主类。

再介绍下类加载顺序:

父类的静态代码块--->子类的静态代码块-->父类的非静态代码块-->父类构造函数-->子类非静态代码块--->初始化子类构造函数。

这个时候你就会发现为什么子类构造要super了。

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式