本文将详细介绍Java中this与super关键字的用法与区别,并通过详细示例加深理解。此外,我们还将探讨this与super的适用场景及注意事项。
一、this关键字
1. 作用:
在Java中,this关键字表示当前对象的引用,可以用来访问对象的成员变量和成员方法。
2. 使用方法:
使用this的一般形式如下:
this.成员变量或成员方法
其中,“this.”是调用当前对象中的成员的前缀,可以直接访问当前对象中的成员变量和成员方法。
举个例子,假设我们有一个名为Person的类,它有一个成员变量名为name,如下所示:
public class Person {
private String name;
public Person(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
}
在该类中,构造方法Person(String name)参数中也有一个name变量,如果不使用this关键字,则无法区分这两个变量。因此,我们需要使用this关键字指定当前对象的name变量,代码如下:
public class Person {
private String name;
public Person(String name) {
this.name = name; // 使用this关键字指定当前对象的name变量
}
public String getName() {
return this.name; // 使用this关键字访问当前对象的name变量
}
}
3. 示例:
下面,我们来看一个更完整的示例。假设我们有一个名为Student的类,它有如下成员变量和成员方法:
public class Student {
private String name;
private int age;
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public void displayInfo() {
System.out.println("姓名:" + this.name + ",年龄:" + this.age);
}
}
在该类中,构造方法Student(String name, int age)使用this关键字指定当前对象的name和age变量,成员方法displayInfo()也使用this关键字访问当前对象的name和age变量,代码如下:
public class Test {
public static void main(String[] args) {
Student s1 = new Student("张三", 18);
Student s2 = new Student("李四", 20);
s1.displayInfo(); // 输出结果:姓名:张三,年龄:18
s2.displayInfo(); // 输出结果:姓名:李四,年龄:20
}
}
从上述示例中可以看出,通过使用this关键字,我们可以很方便地访问当前对象的成员变量和成员方法。
二、super关键字
1. 作用:
在Java中,super关键字表示父类对象的引用,可以用来访问父类的成员变量和成员方法。
2. 使用方法:
使用super的一般形式如下:
super.成员变量或成员方法
其中,“super.”是调用父类对象中的成员的前缀,可以直接访问父类对象中的成员变量和成员方法。
举个例子,假设我们有一个名为Student的子类,它继承自Person父类,如下所示:
public class Person {
protected String name;
public Person(String name) {
this.name = name;
}
public void eat() {
System.out.println("吃饭");
}
}
public class Student extends Person {
private int age;
public Student(String name, int age) {
super(name); // 调用父类的构造方法
this.age = age;
}
public void displayInfo() {
// 使用super关键字访问父类的name变量
System.out.println("姓名:" + super.name + ",年龄:" + this.age);
// 调用父类的eat方法
super.eat();
}
}
在该类中,构造方法Student(String name, int age)使用super关键字调用父类的构造方法,成员方法displayInfo()使用super关键字访问父类的name变量,并调用父类的eat方法,代码如下:
public class Test {
public static void main(String[] args) {
Student s1 = new Student("张三", 18);
s1.displayInfo(); // 输出结果:姓名:张三,年龄:18,吃饭
}
}
从上述示例中可以看出,通过使用super关键字,我们可以很方便地访问父类对象的成员变量和成员方法。
三、this与super的区别
1.作用域不同:
this关键字表示当前对象的引用,可以用来访问对象的成员变量和成员方法。而super关键字表示父类对象的引用,可以用来访问父类的成员变量和成员方法。
2.使用方式不同:
this关键字使用“this.”前缀来访问当前对象的成员变量和成员方法。而super关键字使用“super.”前缀来访问父类对象的成员变量和成员方法。
3.适用范围不同:
this关键字只能在类的内部使用,即只能在类的构造方法、成员方法和内部类中使用。而super关键字既可以在子类中使用,也可以在子类的构造方法和成员方法中使用。
4.优先级不同:
当子类和父类中有同名的成员变量或成员方法时,使用this关键字访问的是当前对象中的成员,使用super关键字访问的是父类对象中的成员。
举个例子,假设我们有一个名为A的父类,一个名为B的子类,如下所示:
public class A {
protected String name = "A";
public void method() {
System.out.println("A");
}
}
public class B extends A {
protected String name = "B";
public void method() {
System.out.println("B");
}
public void displayInfo() {
System.out.println("当前对象的name变量:" + this.name); // 输出结果:B
System.out.println("父类对象的name变量:" + super.name); // 输出结果:A
this.method(); // 输出结果:B
super.method(); // 输出结果:A
}
}
在该类中,子类B和父类A中都有一个名为name的成员变量和一个名为method()的成员方法。在成员方法displayInfo()中,使用this关键字访问当前对象中的name变量和method()方法,使用super关键字访问父类对象中的name变量和method()方法,代码如下:
public class Test {
public static void main(String[] args) {
B b = new B();
b.displayInfo();
}
}
从上述示例中可以看出,当子类和父类中有同名的成员变量或成员方法时,使用this关键字访问的是当前对象中的成员,使用super关键字访问的是父类对象中的成员。
四、this与super的适用场景及注意事项
1. 适用场景:
this关键字适用于在同一类中访问该类的成员变量和成员方法。通常,我们使用this关键字来区分成员变量和局部变量,或者在方法中访问对象的成员。此外,在构造方法中调用另一个构造方法时,我们也可以使用this关键字。
super关键字适用于在子类中访问父类的成员变量和成员方法。通常,在子类中我们需要访问父类中的变量或方法时,就需要使用super关键字。
2. 注意事项:
在使用this关键字时,要注意不要与局部变量或方法参数重名,否则会产生歧义。此外,在使用this关键字调用另一个构造方法时,必须放在构造方法的第一行。
在使用super关键字时,要注意父类中被访问的成员变量和成员方法必须是protected或public类型的,否则访问将被拒绝。此外,在使用super关键字调用父类的构造方法时,必须放在子类构造方法的第一行。
以上就是本文对Java中this和super关键字的详细介绍和示例分析。通过本文的讲解,相信读者已经掌握了this和super的使用方法和区别,能够灵活地运用到Java编程中。