Java中super和this关键字详解
在Java编程中,super和this是两个非常常用的关键字,本文将详细讲解这两个关键字的使用及注意事项。
1. super关键字
在Java中,super
关键字用于访问父类的属性和方法。它一般用于子类覆盖父类的方法时,可以通过super
关键字调用父类的方法。使用super
关键字可以避免重复编写父类已经实现的方法,也可以在子类中通过super
访问父类中的成员变量。
1.1 访问父类的属性和方法
在子类中,使用super
关键字可以访问父类中的属性和方法。示例如下:
class Person {
protected String name;
public Person(String name) {
this.name = name;
}
public void sayHello() {
System.out.println("Hello, I'm " + name);
}
}
class Student extends Person {
protected String school;
public Student(String name, String school) {
super(name);
this.school = school;
}
public void sayHello() {
super.sayHello();
System.out.println("I study in " + school);
}
}
public class Test {
public static void main(String[] args) {
Student s = new Student("Tom", "Tsinghua University");
s.sayHello(); // 输出:Hello, I'm Tom\nI study in Tsinghua University
}
}
在上述示例中,父类Person
中有一个name
属性和一个sayHello
方法,子类Student
继承自Person
,并新增了一个school
属性和一个sayHello
方法。在子类Student
的sayHello
方法中,通过super.sayHello()
调用父类的sayHello
方法,以保证父类中的相应功能得以执行。同时,在子类中新增的输出语句中也可以访问父类中的name
属性。
1.2 调用父类的构造方法
在子类中,使用super
关键字可以调用父类的构造方法。在子类的构造方法中,应该首先调用父类的构造方法,以确保正确地初始化父类的成员变量。示例如下:
class Person {
protected String name;
public Person(String name) {
this.name = name;
}
}
class Student extends Person {
protected String school;
public Student(String name, String school) {
super(name);
this.school = school;
}
}
public class Test {
public static void main(String[] args) {
Student s = new Student("Tom", "Tsinghua University");
System.out.println(s.name); // 输出:Tom
}
}
在上述示例中,子类Student
调用了父类Person
中的构造方法,以初始化父类中的name
属性。
2. this关键字
在Java中,this
关键字用于引用当前对象,可以用于访问当前对象的成员变量和方法。
2.1 引用当前对象
在Java中,this
关键字可以引用当前对象。示例如下:
class Person {
protected String name;
public Person(String name) {
this.name = name;
}
public void sayHello() {
System.out.println("Hello, I'm " + this.name);
}
}
public class Test {
public static void main(String[] args) {
Person p = new Person("Tom");
p.sayHello(); // 输出:Hello, I'm Tom
}
}
在上述示例中,this.name
可以引用当前对象(即Person
对象)中的name
属性。
2.2 表示当前对象
在Java中,this
关键字也可以用于表示当前对象,可以在一个类的方法中调用另一个方法,或者调用其它构造方法。示例如下:
class Person {
protected String name;
public Person(String name) {
this.name = name;
}
public void sayHello() {
System.out.println("Hello, I'm " + this.name);
}
}
class Student extends Person {
protected String school;
public Student(String name, String school) {
super(name);
this.school = school;
}
public Student(String name) {
this(name, "");
}
}
public class Test {
public static void main(String[] args) {
Student s = new Student("Tom");
s.sayHello(); // 输出:Hello, I'm Tom
}
}
在上述示例中,Student(String name)
方法调用了Student(String name, String school)
方法,而Student(String name, String school)
方法中调用了父类的构造方法Person(String name)
,解决了重复代码的问题。
结论
在Java中,super
关键字用于访问父类的属性和方法,而this
关键字用于引用当前对象、表示当前对象,可以用于访问当前对象的成员变量和方法。在使用这两个关键字时,应该注意访问权限的问题,确保访问的成员变量和方法在当前作用域中可见。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java中super和this关键字详解 - Python技术站