概念
面向对象三大特征
- 封装
- 继承
- 多态
多态
多态的实现
- 方法的重载 编译时多态
- 方法的覆盖 运行时多态
多态的必要条件
- 继承
- 重写
- 父类引用指向子类对象
Java
重载
在一个类中,参数个数不同或类型不同或顺序不同
|
|
|
|
重写
父类与子类中,相同函数名和参数,相同返回值类型
|
|
|
|
隐藏
父类的静态方法被子类的同名静态方法隐藏
|
|
|
|
更好的写法
|
|
初始化顺序
- 静态对象(变量)优先于非静态对象(变量)。静态对象(变量)只能初始化一次。
- 父类优先于子类
顺序:父类静态、子类静态、父类非静态、父类构造、子类非静态、子类构造
|
|
|
|
C++
父类指针指向子类对象
调用普通函数
|
|
|
|
调用函数根据指针类型确定,而不是根据指针实际指向的对象类型确定
调用虚函数
|
|
|
|
只有通过基类的引用或者指针调用虚函数时,才能发生动态绑定。
腾讯秋招模拟题
|
|
|
|
隐藏
如果派生类的函数与基类的函数同名,但是参数不同。此时,不论有无 virtual 关键字,基类的函数将被隐藏。
如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有 virtual关键字。此时,基类的函数被隐藏
|
|