this关键字访问普通成员
this.成员变量名;
* 先在本类中查找成员变量,如果本类中没有,则去父类中查找,直到Object类,如果依然没有找到,则编译失败。
* 只要找到了,就不会继续向上查找。
this.成员方法(参数); 先在本类中查找成员方法,如果本类中没有,则去父类中查找,直到Object类,如果依然没有找到,则编译失败。
super关键字访问普通成员
super.成员变量名; 直接去访问父类中查找成员变量,直到Object类,如果依然没有找到,则编译失败。
super.成员方法(参数); 直接去访问父类中成员方法,直到Object类,如果依然没有找到,则编译失败。
super查找原则:父类 > .... > Object类
this查找原则:本类 > 父类 > .... > Object类
什么情况会使用super调用父类的成员方法?
* 子类重写父类方法时,仍然需要保留父类原有功能时,就可以使用super调用父类的该方法。
this和super访问构造方法
this关键字调用构造方法
* this(参数); 调用本类构造方法,如果本类没有,则编译失败,报错。
this关键字调用构造方法注意事项
* 必须使用在构造方法中且必须是第一行有效语句。
super关键字调用构造方法
* super(参数); 调用父类的构造方法,如果没有参数表示调用父类无参数构造方法。如果父类中没有该构造方法,则编译失败。
* 子类中的构造方法都会默认调用父类的无参数构造方法。
* 如果手动通过super调用了父类的构造方法,则默认不会再通过super()调用父类无参数构造方法了。
super关键字调用构造方法注意事项
* 必须使用在构造方法中且必须是第一行有效语句。
* this和super关键字调用构造方法不能同时使用。
什么时候会在子类构造方法中使用super调用父类的构造方法?
* 当需要给父类中定义的成员变量赋值时