this:
1、this. --- 这里的this代表的是当前对象,然后通过“.”操作符,在类的内部访问当前对象的属性或调用当前对象的行为;
2、this() --- 这里的this代表的是本类的构造方法。把它写在本类的构造方法的第一句,表示调用本类的另一个构造,具体调用是谁是通过实参与形参的匹配关系去寻找的。
super:
“super.”当中的super代表的是当前对象的父类对象部分。
通过"."操作符只能访问到从父类继承而来的,并且被访问修饰符允许看到的属性和行为。
*结论:*
凡是用super.能看到的属性和行为,用this.一定能看到;
this.能看到的属性和行为,super.不一定能看到。
所以,大部分情况下,我们更愿意使用"this."。
只有两种情况,我们会用"super.",或者说只有两种情况“super.”和"this." 是有区别的:
1、在子类中用“this."调用重写方法的时候,得到的是子类自己重写后的实现;
而在子类中用"super."调用重写方法的时候,得到的是子类重写前父类中的实现。
场景:假如,子类的某个方法是重写父类的某个方法,但是它是在父类的实现之后加上特有代码,那么我们就可以在重写方法中,先用super.调用父类的实现,然后再加上自己的实现。
2、如果子类和父类出现了同名属性,那么"this."就是访问子类自己的属性;"super."就是访问父类中定义,被子类继承的属性。
PS:由于super()只能写在子类的构造方法当中,且只能是第一句。这说明,super()与this()不能共存。
这也是在面试的时候常遇到的面试题,因此要熟练掌握这两个关键字的用法,分清楚它们之间的区别。