this和super的区别
总结:this:代表当前对象的引用,谁来调用我我就代表谁。super:代表当前对象对父类的引用。
相同点:
-
都是java关键字,起到指代作用;在构造方法中必须出现在第一行。
-
且this() 和super() 不能存在于同一个构造函数中。
- 第一,this()和super()都必须写在构造函数的第一行;
- 第二,this()语句调用的是当前类的另一个构造函数而这个另一个构造函数中必然有一个父类的构造器,再使用super()又调用一次父类的构造器, 就相当于调用了两次父类的构造器,编译器不会通过;
- this和super不能用于static修饰的变量,方法,代码块;因为this和super都是指的是对象(实例)
不同点:
No | 区别点 | this | super |
---|---|---|---|
1 | 访问属性 | 访问本类中的属性,如果本类没有此属性则从父类中继续查找 | 直接访问父类中的属性 |
2 | 调用方法 | 访问本类中的方法,如果本类没有此方法则从父类中继续查找 | 直接访问父类中的方法 |
3 | 调用构造方法 | 调用本类构造,必须放在构造方法的首行 | 调用父类构造,必须放在子类构造方法首行 |
注意:
在对拥有父类的子类进行初始化时,父类的构造方法也会执行,且优先于子类的构造函数执行;因为每一个子类的构造函数中的第一行都有一条默认的隐式语句super();
应用场景:
this:当在方法内需要用到调用该方法的对象时,就用this
具体的:我们可以使用this来区分局部变量和属性
例如:
class Person{
private int age=10;
public Person(){
System.out.println("初始化年龄:"+age);
}
public int GetAge(int age){
this.age=age;
return this.age;
}
}
super:
1.super理解为父类的
2.super可以用来调用属性,方法,构造器
3.super的使用,调用属性和方法
-
我们可以在子类的方法或构造器中,通过使用“
super.属性
”或“super.方法
”的方式,显式的调用父类中声明的属性和方法,但是通常情况下,我们习惯忽略“super.” -
特殊情况:当子类和父类中定义了同名的属性时,我们要想在子类中调用父类中声明的属性,则必须显式的使用"
super.属性
"的方式,表明调用的是父类中声明的属性。 -
特殊情况:当子类重写了父类中的方法以后,我们想在子类的方法中调用父类中被重写的方法时,则必须显使用"
super.方法
"的方式,表明调用的是父类中被重写的方法。 -
今天的分享就到这儿,大家有疑问可以私信我哦,我在这儿等着大家
今天是持续写作的第 8 / 200 天。可以点赞、评论、收藏啦。