Java的this和super
2019-02-14 本文已影响102人
竹鼠不要中暑
this使用方法
this
是指向对象本身的一个指针
- 当方法参数或者方法中的局部变量和成员变量同名的时,成员变量被屏蔽,此时要访问成员变量则需要用
this.变量名
的方式来引用变量(不同名时也可以不加this
,但是最好始终加上); - 通过
this
调用本类中另一个构造方法,用法是this(参数列表)
,这个仅仅在类的构造方法中可以用,并且只能放在类的构造方法的方法体的第一句。多个构造方法,根据传入的参数类型和个数使用哪个构造方法。 - 在方法中,需要引用该方法所属类的当前对象的时候,直接用
this
(这在以上两点中也可以体会到)。
super使用方法:
- 在子类的构造方法中用
super(参数列表)
的方式调用父类的构造函数,这条语句只能放在子类构造方法的方法体的第一句,未传入的参数默认为null
。 - 当子类方法中的局部变量或者子类的成员变量与父类的成员变量同名时,或子类自定义的方法与父类方法同名时,可通过
super.成员变量名/成员方法名
来访问父类的变量或方法。 - 用法实例:
// 父类
public class Wolf {
private int age;
private double weight;
protected String name = "wolf";
public Wolf(int age) {
// 成员变量被方法参数屏蔽,使用this调用成员变量
this.age = age;
}
public Wolf(int age, double weight) {
// 使用this(age)调用另一个构造方法,一般用来在参数多的构造方法内调用参数少的构造方法
this(age);
this.weight = weight;
}
public void eat() {
System.out.println("Wolf: eat");
}
}
// 子类
public class Dog extends Wolf {
protected String name = "dog";
public Dog(int age, double weight) {
super(age, weight); // 调用父类的构造方法
}
public void eat() {
System.out.println("Dog: eat");
}
public void eatTest() {
super.eat(); // 调用与父子同名的父类成员方法
this.eat();
}
public void printNameTest() {
System.out.println("Father's name: " + super.name); // 调用父子同名的父类成员变量
System.out.println("My's name: " + name);
}
}
测试:
public class Test {
public static void main(String[] args) {
Dog dog = new Dog(3, 33);
dog.eatTest();
dog.printNameTest();
}
运行结果: