整理自:Java中this关键字的详解
this关键字
this是自身的一个对象,代表对象本身,可以理解为:指向对象本身的一个指针,
【用法一:this.属性名称】
指的是访问类中的成员变量
用来区分成员变量和局部变量(形参)
*成员变量与局部变量区分:
【用法二:this.方法名称】
用来访问本类的成员方法
【用法三:引用本类的构造函数 this()】
访问本类的构造方法,()中可以有参数——与构造方法保持一致
class Person{
private String name;
private int age;
public Person(){
}
public Person(String name){
this.name = name;
}
public Person(String name, int age){
this(name);
this age = age;
}
}
【注意事项】
1、this()不能在普通方法中使用,只能在构造方法中使用
2、必须是构造方法的第一条语句
super关键字
super可以理解为是指向自己超(父)类对象的一个指针,而这个超类指的是离自己最近的一个父
类。
【用法一:普通的直接引用】
与this类似,super相当于是指向当前对象的父类的引用,这样就可以用super.xxx来引用父类的成员。
【用法二:区分变量/方法名相同的子类和父类】
子类中的成员变量或方法与父类中的成员变量或方法同名时,用super进行区分
class Person{
protected String name;
public Person(String name) {
this.name = name;
}
}
class Student extends Person{
private String name;
public Student(String name, String name1) {
super(name);
this.name = name1;
}
public void getInfo(){
System.out.println(this.name); //Child
System.out.println(super.name); //Father
}
}
public class Test {
public static void main(String[] args) {
Student s1 = new Student("Father","Child");
s1.getInfo();
}
}
【用法三:引用父类构造函数】
super(参数):调用父类中的某一个构造函数(应该为构造函数中的第一条语句)。
【this与super的区别】
1、this和super不能同时出现在一个构造函数里
因为this必然会调用其他构造函数,其他构造函数必要会有super语句存在,所以在同一个构造函数里有相同的语句,失去了语句的意义,编译不通过**【不理解】**
2、this可以调用一个构造器,不能调用两个
3、this()和super()都指的是对象,所以均不可在static环境中使用——static变量、static方法、static语句块
4、从本质上讲,this是一个指向本对象的指针,而super是一个java关键字