JavaGuide icon indicating copy to clipboard operation
JavaGuide copied to clipboard

关于this和super调用构造方法的补充

Open iloooo opened this issue 4 years ago • 0 comments

https://snailclimb.gitee.io/javaguide/#/docs/java/basis/Java%E5%B8%B8%E8%A7%81%E5%85%B3%E9%94%AE%E5%AD%97%E6%80%BB%E7%BB%93

知识点:为什么构造器中this()和super()构造器调用方法必须放在第一行并且二者不能同在一个构造方法

原因: 我的理解是:实质上就是保证实例要从父类开始逐级初始化,完成各个子父类属性加载和方法重写覆盖、叠加成最终实例的属性和方法。super()和this()构造方法调用的最终结果都是完成一次初始化过程,为了不对对象反复初始化,因为二者既不能在同一个构造方法,而且也必须在第一行。(我JVM知识不够,不能从底层解释。)

super(参数列表)执行的操作父类初始化,为了保证初始化的顺序(父类到子类逐层初始化),其需要放在构造方法的第一行。当第一行没有写super()语句时,编译器会自动在构造方法的第一行加上无参super()语句。所以不管子类实例有多少重载的构造方法,最终层的构造器都会在第一行显式或者隐式的调用super(参数列表)才能保证初始化顺序。

this(参数列表)调用实例构造方法,最终结果都是完成父类的初始化,如果不放在第一行,隐式无参的super()就会导致对象反复初始化。

如果super(参数列表)和super(参数列表)同时在同一个构造方法里不论二者顺序,也会导致对象反复初始化。

参考: https://blog.csdn.net/jianbai_/article/details/97424949

希望能和大家探讨学习下各自的理解

iloooo avatar Dec 09 '20 15:12 iloooo