目 录 
一.this关键字
this:
this代表 本类的引用 ,或者是指该类的一个对象,代表着方法的调用者,哪个对象调用的这个方法,方法中的this就代表这个对象.例如set,get 方法中的this:
public class Teacher {
//定义私有成员变量
private String name;
private int age;
//get,set方法中的this就代表了Teacher这个当前类,Teacher这个类调用的name这个属性
public void setName(String name){
this.name=name;
}
public String getName(){
return name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
为什么要有this关键字呢?
当我们的局部变量和成员变量相同的时候,如果我们不使用this关键字,那么会导致一个问题:就是局部变量隐藏了成员变量的问题,如下图:
如果加入了this关键字,就会有如下效果:
在非静态方法中,始终隐藏着一个对象this:
public class Test2 {
int num=90;
public void a(){
System.out.println(this.num); //这个this加或者不加都不会报错!
}
}
this关键字什么时候不能省略呢?
在实例方法(例如set和gat方法)中或者构造方法中,需要区分局部变量和实例变量时,this便不能省略.
补:当前构造方法需要调用另一个本类构造方法时,"this();"这个语句需要放在构造方法的第一行.
二.super关键字
super:
在类的方法中使用,代表 父类的空间表示或者父类的引用 .在子类中的方法使用super,可以 访问父类的数据(成员变量,成员方法).
为什么new子类会先调用父类的 构造方法 ?
在每个子类的构造方法中的第一行,都有一条默认的super();语句去调用父类的空参构造方法先来完成父类的初始化.所以new子类时会先执行默认的隐藏的super();语句,就会先调用父类的构造方法.
public class Fu { //定义父类
public Fu(){
System.out.println("父类构造方法执行了");
}
}
public class Zi extends Fu { //定义子类继承Fu类
public Zi(){
System.out.println("子类构造方法执行了");
}
}
public class Test3 {
public static void main(String[] args) {
Zi z=new Zi(); //创建了一个子类对象
}
}
输出结果:
super关键字什么时候不能省略呢?
子类与父类中存在同名的变量或属性,如果在子类中访问父类中的属性,那么super不可以省略!
三.this关键字和super关键字的区别
- this代表的是本类对象的引用
- 调用成员变量 : this.成员变量 调用本类的成员变量
- 调用构造方法 : this() 调用本类的无参构造方法 this(...) 调用本类的有参构造方法
- 调用成员方法 : this.成员方法 调用本类的成员方法
- this可以单独使用. 例如System.out.println(this);
- super代表的是父类存储空间的标识(可以理解成父类的引用,可以操作父类的成员)
- 调用成员变量 : super.成员变量 调用父类的成员变量
- 调用构造方法 : super() 调用父类的无参构造方法 super(...) 调用父类的构造方法
- 调用成员方法 : super.成员方法 调用父类的成员方法
- super不可以单独使用,必须带一个. 例如:System.out.println(this);
注意:this();与super();两个不可共存,都存在的化会编译报错.
this关键字和super关键字的相同点!
- 都可以存在实例方法和构造方法中.
- 都不能使用在静态方法中.
- 大部分情况下可以省略.
- 只能出现在构造方法的第一行.
(小编也在努力学习更多哟!以后会多多分享哒!)
希望对友友们有所帮助!!!!