继承:子类继承父类,继承而得到的类称为子类,被继承的类叫做父类
继承的好处:
提高了代码的复用性
使类与类之间产生联系,给多态提供了前提
JAVA不支持多继承,用接口来体现
为什么JAVA不支持多继承呢?
因为多个父类中有相同的成员,会产生调用的不确定性
JAVA支持多重继承
比如:C继承A,A继承B
就会出现继承体系
当要使用一个继承体系时
我们要查看该体系的顶层类,了解该体系的基本功能
创建该体系的最子类,来实现功能的使用
什么时候使用继承?
当类与类之间cunz存在着所属关系时,就使用继承。比如:狗属于动物的一种 狗extends动物
在父类中成员的特点
成员变量:
当本类中的成员变量和局部变量出同名的情况用this区分
当子类中的成员变量和父类中的成员变量同名时,用super区分
this和super的用法相似
this代表本类对象的引用,super代表父类空间
成员函数:
当子父类出现一模一样的成员函数时,会运行子类的成员函数,这种现象叫覆盖(重写)
函数的两大特性:重载:同一个类中,方法名相同,参数不同 overrload
重写(覆盖):出现在子父类中
覆盖使用的注意事项:
子类方法覆盖父类方法时,子类的权限必须大于或等于父类的权限
静态只能覆盖静态,或者被静态覆盖
什么时候使用覆盖:
当对一个类进行子类扩展时,子类需要保留父类的方法声明,但是需要定义子类中该
方法的特有内容时,就使用覆盖
子类中父类的构造函数的特点:
在子类构造函数中,发现访问子类构造函数时,父类构造函数也运行了
因为在子类构造函数中的第一行有个默认的隐式语句:super();
子类实例化过程:子类的所有构造函数都默认访问父类的空参数构造函数
为什么子类实例化的时候要访问父类中的空参数构造函数?
因为子类继承父类,获取到了父类的内容(属性),所以在使用父类的内容之前,要先看看父类是怎么对自己的内容进行初始化的
如果父类中没有定义空参数构造函数,那么子类的构造函数必须调用super().语句明确调用父类中的哪个构造函数,同时子类构造函数中使用了this调用了本类构造函数时,那么super就没了,因为this和super只能定义在构造函数的第一行,但是可以保证的是子类肯定会有其他构造函数访问父类的构造函数