面向对象特征二:继承性
方法的重写
super关键字
子类对象的实例化过程
一.继承性
1.为什么要有继承性:
有一些东西拥有某些公共的特性, 将他们相同的部分抽取出来放在一起, 方便代码的复用与修改
2.通过"class A extends B"类实现类的继承:
子类: A; 父类(或基类SuperClass): B
3.子类继承父类以后, 父类中声明的属性、方法, 子类就可以获取到.
明确: 当父类中有私有的属性或方法时, 子类同样可以获取得到, 只是由于封装性的设计, 使得子类不可以直接
调用罢了.
子类除了通过继承, 获取父类的结构之外, 还可以定义自己的特有的成分.
extends:子类是对父类功能的“扩展”, 明确子类不是父类的子集.
4.Java中类的继承性只支持单继承: 一个类只能继承一个父类. 反之, 一个父类可以有多个子类.
5.子父类是相对的概念.
二.orverwrite or override
方法的重载与重写的区别?
重载: “两同一不同”: 同一个类, 同一个方法名, 不同的参数列表. 注: 方法的重载与方法的返回值无关!
构造器也是可以重载的
重写: (前提: 在继承的基础之上, 子类在获取了父类的结构以后, 可以对父类中同名的方法进行“重构”)
- 方法的返回值, 方法名, 形参列表形同;
- 权限修饰符不小于父类的同名方法;
- 子类方法的异常类型不大于父类的;
- 两个方法要同为static或同为非static.
三.super
1.super: 相较于关键字this, 可以修饰属性、方法、构造器
2.super修饰属性、方法: 在子类的方法、构造器中, 通过"super.属性"或者"super.方法"的形式, 显式的调用父类的指定属性或方法. 尤其是, 当子类与父类有同名的属性、或方法时, 调用父类中的结构的话, 一定要用“super.”
3.通过“super(形参列表)”, 显式的在子类的构造器中, 调用父类指定的构造器!
任何一个类(除Object类)的构造器的首行, 要么显式的调用本类中重载的其它的构造器“this(形参列表)”或显式的调用父类中指定的构造器“super(形参列表)”, 要么默认的调用父类空参的构造器"super()"
"super(形参列表)"或"this(形参列表)"只能出现一个
建议在设计类时, 提供一个空参的构造器!
四.子类对象的实例化
先构建(调用父类的构造器构建)父类的内容, 再构建子类的内容
为了直观的理解, 可以运行一下代码, 看输出的结果:
1 | //子类对象实例化的全过程 |
输出结果为:
1 | this is Creator's constructor |