Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
iloooo opened this issue Dec 9, 2020 · 0 comments
Open

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

iloooo opened this issue Dec 9, 2020 · 0 comments
Labels

Comments

@iloooo
Copy link
Contributor

@iloooo iloooo commented Dec 9, 2020

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

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

@Snailclimb Snailclimb added the discuss label Dec 15, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Linked pull requests

Successfully merging a pull request may close this issue.

None yet
2 participants