- 继承中,构造方法的访问特点
- 父类的构造方法不会被子类继承,但可以通过super()调用父类的构造方法,且只能在子类调用,在测试类中是不能手动单写构造方法的。
- 子类中所有的构造方法默认先调用父类的无参构造,再执行自己构造方法的其他代码
- 为什么会先默认调用父类的无参构造?
- 子类在初始化的时候,有可能会使用到父类中的数据,如果此时父类中的数据没有完成初始化,只是单单定义了,子类就无法使用该父类的数据
- 所以子类初始化之前,一定要调用父类构造方法完成父类数据空间的初始化
- 怎么调用父类构造方法的?
- 子类构造方法的第一行语句默认都是:super(),不写虚拟机也会自动加上,且在有效代码第一行,写了虚拟机就不加了,但必须在有效代码第一行(注释不算)
- 如果想调用父类有参构造,必须手动书写带参数的super()进行调用
- this的使用总结
- this:理解为一个局部变量,表示当前方法调用者的地址值,且仅在该方法内有效
- 类的成员方法,构造方法内部都隐含了this变量(作为形参存在),当该方法被调用时,虚拟机就会把调用者的地址值赋给this
- 类的方法内不与局部变量重名的成员变量,变量名前也隐含了this
- 记住this只是在类的方法(成员方法,构造方法)内的一个局部变量。相反,this不是在创建对象时,被包含在对象里的。
- super的使用总结
- 代表父类的存储空间
- this和super的使用方式
- 若类的成员变量与局部变量不重名,那么前面的this可以省略不写
- 在类里调用本类的成员方法时,前面的this也可以省略不写
- this():
a. 仅在构造方法中,用来调用本类的其他构造方法
b. 一旦写完this(),虚拟机便不会添加super()了,因为其他构造的第一行已经写过super()了
c. this()必须写在有效代码的第一行,如super()