继承就是子类继承父类的特征和行为,使得子类对象具有父类的实例和方法,或子类从父类继承方法,使得子类具有父类相同的行为。
代码角度:java中通过extend关键字来声明一个类是从另一个类继承而来的,子类可以继承父类的内容,子类所需的可以直接从父类中获得,要避免子类中重复定义。
现实角度:子类和父类之间的关系必须符合现实生活上的逻辑关系。
继承是可以形成体系的,和现实生活中的逻辑体系一致的
例如:
水杯->容器
碗->容器
java中也一样,有很多体系
Number体系-----------数字家族
lnteger
double
int
注意:子类不能选择性继承父类
java不支持多重继承,类与类之间只能是单继承关系,一个类可以实现多个接口,接口与接口之间是可以多重继承的,从而克服了单继承的缺点
构造方法不会被子类继承,但可以从子类中调用父类的构造方法
子父类中成员变量的特点:
类在创建对象时,成员变量会储存到堆内存中,并进行默认初始化
先是子类对象的成员变量进行创建并进行默认初始化
再对父类对象的成员变量进行创建并进行默认初始化储存在子类的super空间里
再然后子类对象调用子类的构造函数,子类构造函数进栈同时进行显示初始化(子类和父类的成员变量都进行显示初始化)
当子类想要调用父类的成员变量,子类对象会先去堆中找子类的成员变量,再去子类静态方法区里寻找静态变量,最后再去父类的成员变量找
当子类成员函数想要调用变量,会先寻找成员函数中的局部变量,再去找子类的成员变量,再去子类静态方法区找静态变量,最后再去父类的成员变量中找
子类要访问父类私有成员变量
子类可以继承父类的public成员,但不能继承父类的private成员的,如果要访问父类私有的成员变量,就必须通过调用父类提供者的公共接口进行访问
使用super关键字
使用关键字super调用父类中重写的方法
子类有,父类也有,子类就重写了父类中的某一个方法,
如果父类有,子类没有,则调用父类的;
如果父类没有,子类有,则调用子类的;
如果父类有,子类也有,则要重写,调用子类的
注意:
函数名必须一致
返回值类型必须保持一致
参数列表必须保持一致
子类的权限必须大于等于父类函数的权限
用关键字super调用父类有参/无参构造函数
当使用无参super()时,则调用父类的无参构造函数
当使用有参super()时,则调用父类的有参构造函数
注意:
如果要初始化父类中的字段,可以在子类的构造方法中通过关键字super调用父类的构造方法
对于父类构造函数的掉用,即使用关键字super,必须放在子类构造方法的第一行
如果父类的构造函数没有参数,子类则不需要使用关键字super调用父类构造函数,系统会自动调用子类的无参构造函数
如果父类的构造函数有参数,子类则必须用关键字suepr调用父类的构造函数
子类是不调用父类的构造函数的,他只是通过关键字super隐式调用
子父类中 静态成员的特点
静态变量的特点同成员变量
父类有,子类无,调用父类的
父类无 ,子类有 ,调用子类的
父类有 ,子类有 ,调用子类的
静态函数的特点同静态变量
父类有 ,子类无, 调用父类的
父类无, 子类有, 调用子类的
父类有 ,子类有, 调用子类的
注意:静态函数不存在重写的问题