继承 inherit/inheritance
--------------------------------------------------------------------------------
继承建立的思考过程:
父类是从子类中逐步抽取而来的, 而子类是从对象中逐步抽取而来的
虽然事实上先有父类才有子类.
继承好处:
1. 提高代码复用性和维护性
2. 让类与类之间产生关系, 有了这个关系, 才有多态特性
即继承是多态的基础
设计继承的基本要求(判断继承是否合适):
子类继承父类后不存在多余成员
因为: 多余成员没有任何用处, 反而使得程序阅读性变差.
千万不要为了获取其他类的功能而继承
必须是类与类之间存在所属关系时才可以继承
所属关系为 is a, 即子类 is a 父类. 如学生(Student)是一个人(Person)
Java 只支持类的单继承, 不支持多继承
因为多继承容易带来安全隐患:
当多个类中定义了相同功能但功能体不同时, 子类对象不确定到底要运行哪一个.
虽然不支持类的多继承, 但是 Java 保留了这种机制, 其表现形式为多实现.
Java 支持类的多层继承
也就是一个继承体系
如何使用一个继承体系中的功能呢?
一句话, 查阅父类功能, 创建子类对象使用该功能!!!
--------------------------------------------------------------------------------
子父类中变量的特点
子父类中出现同名变量时,
子类使用"this.变量名"访问本类的变量, 使用"super.变量名"访问父类的变量
同名类变量应采用"类名.变量名"的访问方式
子父类中方法的特点 - 覆盖 override
函数的覆盖特性, 便于实现函数功能的扩展(提高程序的扩展性)
覆盖时, 子类可通过 super 语句调用父类同名函数继承其已实现功能, 避免重复编写.
override 的注意事项:
1. 父类函数权限不为 private
2. 子类函数权限必须大于父类函数权限, 否则编译失败
3. 子类方法 throws 子句抛出的异常只能是父类方法 throws 子句抛出异常的子集
4. 构造器可重载, 不能覆盖
override 和 overload 比较
override: 要求子父类方法签名必须一模一样(包括方法名, 参数列表和返回值类型)
方法签名不包含返回值类型的!!!
子类返回值类型可以是父类返回值类型的子类型
重载: 只看同名函数的参数列表
子父类中构造器的特点
***在对子类对象进行初始化的过程, 父类构造器也会运行.
那是因为子类的构造器默认第一行有一条隐式的 super() 语句;
super(): 会访问父类中空参数的构造器, 而且子类中所有构造器默认第一行都是 super();
--------------------------------------------------------------------------------
|
|