一、类的继承
- 共性与个性:
- 共性,表达不同类型事务之间共有的属性和行为
- 个性,用于刻画每种事物持有的属性和行为。
- 共性表示为父类(基类),个性表示为子类(派生类)
二、继承的基本语法
- 继承表
- 一个子类可以同时继承零到多个父类,每个父类的继承方式可以相同也可以不同
class 子类:继承方式1 父类1,继承方式2 父类2,...
{
}
- 继承方式
public
共有继承:父类的特性可通过子类向外扩展private
私有继承:父类的特性只能为子类所有protected
保护继承:父类的特性只能在继承链内扩展
三、继承的基本特点
- 公共特点(所有继承都具备的特点):
- 子类对象可以当做父类对象使用
- 子类对象与父类对象没有本质上的区别
- 子类的逻辑空间小于父类
- 物理空间大于等于父类
- 子类对象 IS A 父类对象
- 向上和向下转换(造型):
- 从子类到父类,子类的指针或引用可以隐式转换成父类的指针或引用,这是一种缩小类型的转换,对于编译器来说是安全的;(父类指针指向子类对象,是安全的)
- 从父类到子类,父类的指针或引用不可以转换成子类的指针或引用,这是一种扩大类型的转换,在编译器中看来是危险的。(子类的指针指向父类的对象,不安全)
- 编译器仅仅是检查指针或引用的数据类型,而对实际引用的目标对象不关心(构成多态的基础)
- 类型一致:
- 父类的指针或引用类型是否需要转换成实际的指针或引用由程序员自己决定。
- 子类会继承父类的所有成员(公开、私有、保护)
- 子类会隐藏父类的同名成员,但也可以通过方法访问父类中的隐藏成员
- 可以通过域限定符
父类::隐藏成员
,进行访问父类中的隐藏成员 - 可以使用指针或引用来指向子类对象,然后访问父类中的隐藏成员
- 虽然子类继承所有父类中的成员,但不能访问父类中的私有成员
四、继承方式影响访问控制
访问控制限定符 | 内部 | 子类 | 外部 | 友元 |
---|
public | 可以访问 | 可以访问 | 可以访问 | 可以访问 |
private | 可以访问 | 可以访问 | 不可以访问 | 可以访问 |
protected | 可以访问 | 不可以访问 | 不可以访问 | 可以访问 |
父类(基类)中 | 在公有子类中变成 | 在保护子类中变成 | 在私有子类中变成 |
---|
public | 公有成员 | 保护成员 | 私有成员 |
private | 保护成员 | 保护成员 | 保护成员 |
protected | 私有成员 | 私有成员 | 私有成员 |