在使用这两个关键字时需要记住"this指对象本身,super指最近父类".
- 使用this 表示当前调用方法的对象引用.
this的使用场景:
-
当方法的内部需要使用当前对象时,可以使用this代替当前对象。
image.png -
当类中有两个同名变量,一个属于类(类的成员变量),而另一个属于某个特定的方法(方法中的局部变量),使用this区分成员变量和局部变量,带this的为成员变量。(严格来说这个场景也是this代替当前对象的体现,只是为了容易理解)
image.png
- 使用super 表示当前类的最近父类的对象引用.
继承是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。
Java可以通过继承可以让子类拥有父类实例域和方法而不必在子类中体现出来.
如何在子类中调用父类的方法呢?
这个时候可以使用super访问父类被子类隐藏的变量或覆盖的方法。当前类继承一个父类,当调用super.XX()就是调用这个父类版本的XX()方法。
class Country {
String name;
void value() {
name = "China";
}
}
class City extends Country {
String name;
void value() {
name = "BeiJing";
super.value(); //调用父类的方法
System.out.println(name);
System.out.println(super.name);
}
public static void main(String[] args) {
City city=new City();
city.value();
}
}
// 输出
BeiJing
China
- this与super在构造方法中的使用
super(参数):调用父类中的某一个构造函数。
this(参数):调用本类中另一种形式的构造函数。
调用super(参数)必须写在子类构造方法的第一行,否则编译不通过。每个子类构造方法的第一条语句,都是隐含地调用 super(),如果父类没有某种形式(参数不对应)的构造函数,那么在编译的时候就会报错。
super(参数) 和 this(参数) 类似,区别是,super(参数) 从子类中调用父类的构造方法,this(参数) 在同一类内调用其它方法。
super(参数) 和 this(参数) 均需放在构造方法内第一行。
网友评论