继承的定义与使用
面向对象的第二大特征就是继承性,特点在于可以扩充已有类的功能。
继承问题引出
良好的代码:结构性合理、适合于维护、可重用性很高;写代码时不可避免的面对重复问题。
类的改变可以解决结构性的问题,但会发现总会有重复的代码出现在程序中,进一步思考如果想要进行代码的重用,必须使用继承的概念来解决,所谓继承的本质:在已有类的基础上进行功能的扩充;
继承的实现
在Java中实现继承关系,必须依靠extends关键字来完成,语法
class 子类 extends 父类{}
很多情况下把子类成为派生类,把父类称为超类(SuperClass)
继承实现的主要目的在于子类可已重用父类中的结构,并且可以实现功能的扩充,子类可以定义更多的内容,并且描述的范围更小;
子类对象实例化流程
一旦程序中有继承逻辑,我们对与子类对象的实例化定义是有要求的,正常来说没有父类便没有子类,对象实例化的时候一定要有一个父类对象;
即使没有进行父类对象实例化,也会由系统自动调用父类的构造方法(实例化父类),默认情况下的子类对象实例化流程会自动实例化父类对象,实际上相当于子类的构造方法里面隐含了一个“Super()”的形式;
Super()表示的子类构造调用父类构造的语句,只允许放在子类构造方法的首行,但注意在默认情况下,子类只会调用父类中的无参构造方法,若不存在无参构造,则必须使用Super()指定构造方法;
在实例化子类对象的同时,一定会实例化父类对象,目的是为了所有的属性可以进行空间的分配;
Super与this都可以调用构造方法,super由子类调用父类的构造,而this是调用本类构造,并且一定要放在构造方法首行,所以两个语句不允许同时出现;
继承定义限制
1、java中不允许多重继承,只允许多层继承;多重继承的目的是希望可以同时继承多个类中的方法,而面对多继承的要去应将范围限定在同一类中;
//多层继承
class A{}
class B sextends A{}
class C extends B{}
多层继承也需要有限度,层次一般不应该超过三层;
2、在进行继承关系定义的时候,实际上子类可以继承父类中的所有操作结构。但是对于私有操作属于隐式继承,而所有的非私有操作属于显式继承,继承一旦发生了,所有的操作都可以被子类使用了,子类至少会维持父类现有功能;