1、继承中访问成员变量
在父子类的继承关系当中,如果成员变量重名,则创建子类对象时,访问有两种方式:
(1)直接通过子类对象访问成员变量:等号左边是谁,就优先用谁,没有则向上找。
(2)间接通过成员方法访问成员变量:该方法属于谁,就优先用谁,没有则向上找。
(小提示)区分子类方法重名的三种变量:局部变量直接写变量名,本类的成员变量写this.成员变量名,父类的成员变量写super.成员变量名。
2、继承中访问成员方法
在父子类的继承关系当中,则创建子类对象时,访问成员方法的规则:
创建的对象是谁,就优先用谁,如果没有则向上找。
3、继承中方法的覆盖重写
重写(override ):在继承关系中,方法名称一样,参数列表也一样。
重载(overload ):方法的名称一样,参数列表不一样。
方法重写的特点:创建的是子类对象,则优先用子类方法。
注意事项:
(1)必须保证父子类之间方法的名称相同,参数列表也相同。
@override:写在方法前,检测是不是有效的正确重写。可不写该注解
(2)子类方法的返回值必须小于等于父类方法的返回值范围。
(3)子类方法的权限必须大于等于父类方法的权限修饰符。
小提示:public >protected>(default)>private
4、继承中的构造方法
(1)子类构造器方法当中有一个默认隐含的“supper()”调用,所以一定是先调用父类的构造,后执行子类的构造。
(2)子类构造可以通过super关键字来调用父类的重载构造。
(3)super的父类构造调用,必须是子类的第一个语句。不能一个子类构造器调用多次super构造。
小提示:
(1)super关键字,能在子类成员方法中访问父类的成员变量和成员方法,能在子类构造器中访问父类的构造方法。
(2)this关键字,能在本类成员方法中访问本类的成员变量和其他成员方法,能在本类的构造器中访问其他构造器。
(3)this(...)调用也必须是构造方法的第一个语句,且唯一。super和this两种构造器不能同时使用。
5、抽象方法与抽象类
(1)不能直接创建抽象类对象,但是是声明抽象类变量,引用对象是其具体子类。
(2)抽象类中可以有构造方法,供子类创建对象时,初始化父类成员使用。
(3)抽象类中不一定包含抽象方法,但是抽象方法所在类必须是抽象类,在class前加上abstract即可。
(4)抽象类的子类必须重写抽象父类中的所有抽象方法,除非该子类也是抽象类。