?目? 录?
一.this关键字
this:
为什么要有this关键字呢?
在非静态方法中,始终隐藏着一个对象this:
二.super关键字
super:
为什么new子类会先调用父类的? 构造方法???
?三.this关键字和super关键字的区别
一.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加或者不加都不会报错!
}
}
二.super关键字
super:
????????在类的方法中使用,代表?父类的空间表示或者父类的引用?.在子类中的方法使用super,可以?访问父类的数据(成员变量,成员方法).
在每个子类的构造方法中的第一行,都有一条默认的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(); //创建了一个子类对象
}
}
输出结果:
?三.this关键字和super关键字的区别
- this代表的是本类对象的引用
- 调用成员变量 :? ? ? ?this.成员变量? ? ? ? ?调用本类的成员变量
- 调用构造方法?:? ? ? this()? ?? 调用本类的无参构造方法? ? this(...)? ? ? ? 调用本类的有参构造方法
- 调用成员方法?:? ? ?this.成员方法 ?? ??? ?调用本类的成员方法
?
- super代表的是父类存储空间的标识(可以理解成父类的引用,可以操作父类的成员)
- 调用成员变量 :? ? ? ?super.成员变量 ?? ?调用父类的成员变量
- 调用构造方法?:? ? ? super()?? ?调用父类的无参构造方法? ?super(...)? ? ? ?调用父类的构造方法
- 调用成员方法?:? ? ?super.成员方法 ?? ?调用父类的成员方法
注意:this();与super();两个不可共存,都存在的化会编译报错.
(小编也在努力学习更多哟!以后会多多分享哒!)
希望对友友们有所帮助!!!!
|