this 关键字
当前实例的引用:this 关键字用于指代当前对象的实例。
区分成员变量和局部变量:当成员变量与局部变量重名时,可以使用 this 来区分成员变量。例如,在构造器或方法中,this.variable 指的是当前实例的成员变量 variable,而简单的 variable 指的是局部变量。
在构造器中调用其他构造器:在一个构造器内部,this() 可以用来调用同一个类中的另一个构造器,以避免代码重复。需要注意的是,this() 调用必须是构造器中的第一个语句。
方法链:在方法中返回当前对象的引用 (return this;),可以实现方法链调用,即多个方法调用可以在单行中连续执行。
super 关键字
父类的引用:super 关键字用于指代当前对象的父类实例。
访问父类的成员:当子类中的成员(方法或变量)与父类中的成员重名时,可以使用 super 来引用父类的成员。例如,super.variable 访问的是父类的成员变量 variable。
在子类构造器中调用父类构造器:super() 用于从子类的构造器中调用父类的构造器。如果子类构造器没有显式地调用父类构造器,编译器会默认插入一个无参的 super() 调用。和 this() 一样,super() 调用必须是子类构造器中的第一个语句。
访问父类的方法:在子类中,可以使用 super.method() 来调用父类中被覆盖的方法。
点击查看代码
class Person {
String name;
Person(String name) {
this.name = name; // 使用 this 区分成员变量和构造器参数
}
void introduceSelf() {
System.out.println("My name is " + this.name); // 使用 this 引用当前实例的成员变量
}
}
class Employee extends Person {
String company;
Employee(String name, String company) {
super(name); // 使用 super 调用父类的构造器
this.company = company; // 使用 this 区分成员变量和构造器参数
}
@Override
void introduceSelf() {
super.introduceSelf(); // 使用 super 调用父类中被覆盖的方法
System.out.println("I work at " + this.company); // 使用 this 引用当前实例的成员变量
}
}