JavaGuide
JavaGuide copied to clipboard
关于this和super调用构造方法的补充
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
希望能和大家探讨学习下各自的理解