Java 中的关键字 thissuper 在面向对象编程中起着重要的作用。它们用于访问当前对象和父类对象的成员变量和方法。本文将深入探讨 thissuper 的用法,以及如何在 Java 中正确使用它们。

this 关键字

在 Java 中,this 关键字是一个引用,它引用当前对象。当我们创建一个对象时,内存中会为该对象分配空间,并在创建对象时隐式地将 this 引用指向该对象。使用 this 关键字可以访问当前对象的成员变量和方法。

访问成员变量

使用 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 关键字还可以在构造方法中调用其他构造方法。这在构造方法重载时非常有用。

public class Person {
    private String name;
    private int age;

    public Person() {
        this("John Doe", 18);
    }

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

在上面的代码示例中,第一个构造方法通过 this 关键字调用了第二个构造方法,并传递了默认的参数值。

super 关键字

super 关键字用于访问父类的成员变量和方法。它可以用于以下几种情况:

  • 调用父类的构造方法
  • 调用父类的成员变量
  • 调用父类的方法

调用父类的构造方法

当子类需要调用父类的构造方法时,可以使用 super 关键字。

public class Student extends Person {
    private int grade;

    public Student(String name, int age, int grade) {
        super(name, age);
        this.grade = grade;
    }
}

在上面的代码示例中,super(name, age) 调用了父类 Person 的构造方法。

调用父类的成员变量和方法

使用 super 关键字可以访问父类的成员变量和方法。当子类和父类具有同名的成员变量或方法时,使用 super 关键字可以区分它们。

public class Student extends Person {
    private int grade;

    public Student(String name, int age, int grade) {
        super(name, age);
        this.grade = grade;
    }

    public void printInfo() {
        System.out.println("Name: " + super.getName());
        System.out.println("Age: " + super.getAge());
        System.out.println("Grade: " + this.grade);
    }
}

在上面的代码示例中,super.getName()super.getAge() 调用了父类 Person 的方法。

使用示例

下面我们通过一个完整的示例来演示 thissuper 关键字的用法。

public class Person {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return this.name;
    }

    public int getAge() {
        return this.age;
    }
}

public class Student extends Person {
    private int grade;

    public Student(String name, int age, int grade) {
        super(name, age);
        this.grade = grade;
    }

    public void printInfo() {
        System.out.println("Name: " + super.getName());
        System.out.println("Age: " + super.getAge());
        System.out.println("Grade: " + this.grade);
    }
}

public class Main {
    public static void main(String[] args) {
        Student student = new Student("Tom", 16, 10);
        student.printInfo();
    }
}

在上面的示例中,Person 类表示一个人,Student 类继承自 Person 类,并增加