📅  最后修改于: 2023-12-03 15:31:57.501000             🧑  作者: Mango
在Java中,关键字super和this都是用来引用对象的。这两个关键字在不同的情况下起不同的作用。
super关键字用于引用父类的成员变量、成员方法和构造方法。使用super关键字的格式为:
super.成员变量
super.成员方法(参数列表)
super(参数列表)
如果子类和父类具有同名的成员变量,通过super关键字可以引用父类的成员变量。例如:
class Parent {
String name = "parent";
}
class Child extends Parent {
String name = "child";
void print() {
System.out.println(super.name); // 输出:parent
}
}
使用super关键字可以调用父类的成员方法。例如:
class Parent {
void print() {
System.out.println("parent");
}
}
class Child extends Parent {
void print() {
super.print(); // 调用父类的print方法
System.out.println("child");
}
}
在子类的构造方法中使用super关键字调用父类的构造方法。例如:
class Parent {
Parent(String name) {
System.out.println("Parent: " + name);
}
}
class Child extends Parent {
Child() {
super("child");
}
}
this关键字用于引用当前对象的成员变量、成员方法和构造方法。使用this关键字的格式为:
this.成员变量
this.成员方法(参数列表)
this(参数列表)
如果方法的参数和类的成员变量同名,使用this关键字可以引用当前对象的成员变量。例如:
class Person {
String name;
Person(String name) {
this.name = name; // 引用当前对象的name成员变量
}
}
使用this关键字可以调用当前对象的成员方法。例如:
class Person {
void print() {
System.out.println("person");
}
void greet() {
this.print(); // 调用当前对象的print方法
System.out.println("hello");
}
}
在一个构造方法中使用this关键字调用当前类的其他构造方法。例如:
class Person {
String name;
Person(String name) {
this.name = name; // 引用当前对象的name成员变量
}
Person() {
this("unknown"); // 调用当前类的另一个构造方法
}
}