父子类重名
直接通过子类对象访问的成员变量:
(Zi zi = new Zi();) 等号左边是谁就优先用谁,没有向上找。
间接通过成员方法访问成员变量:
该方法属于谁就有先用谁,没有向上找。
三个变量重名
局部变量: 直接写局部变量名
本类成员变量: this.成员变量名
父类的成员变量: super.成员变量名
在父子类的继承关系当中,创建子类对象,访问成员方法的规则
覆盖重写(override)
对比
重写(override):方法的名称一样,参数列表也一样。覆盖,覆写
重载(Overload):方法的名称一样,参数列表不一样。
方法覆盖重写的注意事项:
1.必须保证父子类方法名称一致,参数列表相同。
@Override:写在方法前面,用来检测是不是有效的正确覆盖重写
2.子类方法的返回值必须大于等于父类方法的返回值范围
java.lang.Object类是所有类的最高父类
3.子类方法的权限必须大于等于父类方法的权限修饰符。
public > protected > (default) >private
(default)不是关键字
覆盖重写应用场景
如何在继承的方法中避免写父类重复内容:super.父类方法();
继承关系中,父子类构造方法的访问特点
子类必须调用父类构造方法,不写编译器直接加上,super只能有一个,必须是构造方法第一行
super关键字的用法有3种
1.在子类的成员方法中,访问父类的成员变量
2.在子类的成员方法中,访问父类的成员方法。
3.在子类的构造方法中,访问父类的构造方法。
this的三种用法
1.本类的成员方法中,访问本类的成员变量。
2.本类的成员方法中,访问类的另一个成员构造方法。
3.在本类的构造方法中,访问本类的另一个构造方法。
- this(...)调用也必须是构造方法第一个语句
- super和this两种构造调用不能同时使用。