总结
super 访问父类内容, this 访问本类内容
super 关键字用法: (注:首字母小写)
- 在子类的成员方法中,访问父类的成员变量
- 在子类的成员方法中,访问父类的成员方法
- 在子类的构造方法中,访问父类的构造方法
this 关键字用法: (注:首字母小写)
- 在本类的成员方法中,访问本类的成员变量
- 在本类的成员方法中,访问本类的【另一个成员方法】
- 在本类的构造方法中,访问本类的【另一个构造方法】
注:
this 只能有一个(一个方法块中)
this 和 super 不能同时使用(一个方法块中)
类方法里面不能使用“this”关键字,因为没有实例存在,“this”不知道引用哪个实例
作用:解决命名冲突问题
变量:
局部变量: 直接写成员变量名
本(子)类的成员变量: this.成员变量名
父类的成员变量: super.成员变量名
例子
package supertest;
public class SuperClass {
int num = 10;
public SuperClass() {
System.out.println("executing super class construction");
}
public void method() {
System.out.println("executing super class method");
}
}
package supertest;
public class SubClass extends SuperClass{
int num = 20;
public SubClass() {
super(); // 3.访问父类构造方法
System.out.println("executing sub class construction");
}
public void showNumber() {
int num = 30;
System.out.println("local variable, num: " + num); // 局部变量
System.out.println("super class, num: " + super.num); // 1. 访问父类的成员变量
System.out.println("sub class, num: " + this.num); // 1. 访问本类的成员变量
}
@Override
public void method() {
// override super class method
super.method(); // 2.访问父类的成员方法
System.out.println("executing sub class method");
this.anoMethod(); // 2.在本类的成员方法中,访问本类的【另一个成员方法】
}
public void anoMethod() {
System.out.println("executing another method");
}
}
package supertest;
public class SuperTest {
public static void main(String[] args) {
SubClass subClass = new SubClass();
subClass.showNumber();
subClass.method();
}
}