一、this关键字 1、定义
this可以调用类的属性、方法和构造器
它在方法内部使用,即这个方法所属对象的引用
它在构造器内部使用,表示该构造器正在初始化的对象
2、this调用结构
this调用属性/方法
①在类的方法中,我们可以使用"this.属性"或"this.方法"的方式,调用当前对象属性或方法。但是,通常情况下,我们都选择省略"this."。特殊情况下,如果方法的形参和类的属性同名时,我们必须显式的使用"this.变量"的方式,表明此变量是属性,而非形参
②在类的构造器中,我们可以使用"this.属性"或"this.方法"的方式,调用当前正在创建的对象属性或方法。但是,通常情况下,我们都选择省略"this."。特殊情况下,如果构造器的形参和类的属性同名时,我们必须显式的使用"this.变量"的方式,表明此变量是属性,而非形参
this调用构造器
① 在类的构造器中,可以显式的使用"this(形参列表)"方式,调用本类中指定的其他构造器
② 构造器中不能通过"this(形参列表)"的方式调用自身构造器
③ 如果一个类中声明了n个构造器,则最多有n-1个构造器中使用了"this(形参列表)"。不能出现循环调用
④ "this(形参列表)"必须声明在类的构造器的首行
⑤ 构造器内部,最多只能声明一个"this(形参列表)",用来调用其他的构造器
二、super关键字 1、定义
super理解为:父类的
使用super来调用父类中的指定操作
super可用于访问父类中定义的属性
super可用于调用父类中定义的成员方法
super可用于在子类构造器中调用父类的构造器
super的追溯不仅限于直接父类
2、super调用结构
super调用属性/方法
① 在子类的方法或构造器中,通过"super.属性"或者"super.方法"的方式,显式的调用父类中声明的属性或方法。但是很多情况下都可以省略"super."
② 当子类和父类中定义了同名的属性时,若想在子类中调用父类中声明的属性,则必须显式的使用"super.属性"的方式,表明调用的是父类中声明的属性。说明:子类的属性不会覆盖父类中同名属性。在堆空间中,两个属性都会存在
③ 当子类重写了父类中的方法以后,若想在子类的方法中调用父类中被重写的方法时,则必须显式的使用"super.方法"的方式,表明调用的是父类中被重写的方法
super调用构造器
① 在子类的构造器的首行,显示的使用“super(形参列表)”的方式,调用父类指定的构造器
② 针对于子类的某一个构造器而言,只能最多声明一个“super(形参列表)”
③ 在子类的构造器中,针对于"this(形参列表)"或"super(形参列表)"只能二选一,不能同时出现
④ 在子类构造器的首行,没有显式的声明"this(形参列表)"或"super(形参列表)",则默认调用的是父类中空参的构造器:super()。此时父类中必须存在空参构造器,不然报错