this和super
this和super关键字
this特点
- 用于代指本类对象
- 用于区分成员变量与局部变量
- this()代指本类中的无参构造,也可通过传递参数代指含参构造
- this 在构造方法中必须出现在第一行
super特点
- 用于代指父类对象
- 用于区分父类变量和本类变量
- super()代指父类的无参构造,也可通过传递参数代指含参构造
- super()在构造方法中必须出现在第一行
问题
为什么this和super在构造方法中必须出现在第一行?
首先记住一个规则:构造方法在执行时会先扫描第一行,如果既没有this(),也没有super(),就会默认添加一个super()。
接着来先回答为什么super必须在第一行,因为本类构造方法中执行时很有可能会使用父类的资源,super()出现在第一行,调用了父类的无参构造,可将父类的资源进行初始化,这样本类才可以正常使用。
为什么this也要出现在第一行?
this()用来代指本类的无参构造,构造方法中第一行如果没有this的话,就会有个super()或默认有个super(),这样同样可以实现初始化父类。
如果第一行有this,则看这个this调用的构造方法第一行是否为super,以此类推,肯定会有个构造方法的第一行会有super或默认的super,从而实现初始化父类
不可能所有的构造方法都有this,因为这样所有的构造方法都会互相调用,从而变成死循环
注意事项
this和super不能同时出现在构造方法中