Java 中的 this 和 super 关键字是面向对象编程非常重要的概念。它们的作用不同,但在一定程度上又有重叠。接下来我将详细讲解它们的区别。
this 关键字
this
关键字代表当前对象,它可以用于:
- 引用当前类中的成员变量或成员方法。
- 当构造函数的参数名和成员变量名相同时,用于区分两者,以便正确地初始化成员变量。
- 将当前对象作为参数传递给其他方法。
- 返回当前对象。
下面我来举一个示例。
public class Person {
private String name;
public Person(String name) {
this.name = name;
}
public void printName() {
System.out.println("My name is " + this.name);
}
}
在上面的示例中,我们使用 this.name
来引用成员变量 name
,这样可以明确地表明我们要引用它。如果没有使用 this
,那么编译器会认为我们是在引用参数 name
,但在这里参数 name
并没有被定义,所以编译会报错。
另外一个示例是关于将当前对象作为参数传递给其他方法:
public class Person {
private String name;
public Person(String name) {
this.name = name;
}
public void printName() {
Printer printer = new Printer();
printer.print(this);
}
}
public class Printer {
public void print(Person person) {
System.out.println("My name is " + person.getName());
}
}
在上面的示例中,我们使用 this
来将当前对象作为参数传递给其他方法。这样可以方便地在其他方法中访问当前对象的方法和成员变量。
super 关键字
super
关键字代表当前对象的父类对象,它可以用于:
- 调用父类中的成员变量或成员方法。
- 在子类构造函数中显式地调用父类构造函数进行初始化。
下面我来举一个示例。
public class Animal {
protected String name;
public Animal(String name) {
this.name = name;
}
}
public class Dog extends Animal {
private String breed;
public Dog(String name, String breed) {
super(name);
this.breed = breed;
}
public void printName() {
System.out.println("My name is " + super.name);
}
}
在上面的示例中,我们使用 super(name)
来显式地调用了父类的构造函数进行初始化。这样可以避免父类中的成员变量没有被正确地初始化。
另外一个示例是调用父类中的成员变量:
public class Animal {
protected String name;
public Animal(String name) {
this.name = name;
}
}
public class Dog extends Animal {
private String breed;
public Dog(String name, String breed) {
super(name);
this.breed = breed;
}
public void printName() {
System.out.println("My name is " + super.name);
}
}
在上面的示例中,我们使用 super.name
来引用父类的成员变量 name
。这样可以明确地表明我们是要引用父类的成员变量,而不是子类的成员变量。
综上所述,虽然 this 和 super 关键字都可以引用对象中的变量和方法,但其具体作用是不同的。this 表示当前对象,而 super 表示当前对象的父类对象。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java 中的 this 和 super 区别 - Python技术站