什么是多态
同一类对象,做同一类事情,表现出不同的状态
多态 ==> 多种状态
将子类对象转换为父类类型
可以隐式转换
可以理解为栈内存储的是父类对象的指针
将父类对象转换为子类类型
需要强制转换
(要转换的类型)对象
(对象) as 要转换的类型【仅限引用类型】
如果转换失败,则转换后的对象为null
强制转换之前需要先进行类型判断,判断是否可以转换成功
(对象) Is 类型【仅限引用类型】
子类方法的覆盖
前提条件:父类中有一个public函数,子类中没有该函数
因为子类中并没有该函数,所以调用必是父类的
前提条件:子类里已经有了该函数,父类里也有该函数
此时,子类对象调用子类的该函数,父类对象调用父类的该函数
这种子类的函数,可以称之为覆盖
子类在书写该函数的时候,规范的写法应该是:
(访问修饰符) new 返回值类型 函数名 (参数列表)
覆盖:子类也有该函数了,以后调用的时候就调用子类的该函数
子类方法的重写【表现出多态】
首先,如果父类想要子类可以重写该函数
那么父类的该函数必须是一个虚函数
(访问修饰符) virtual返回值类型 函数名 (参数列表)
子类该怎么重写
(访问修饰符) override 返回值类型 函数名 (参数列表)
重写:把子类和父类的该函数都重新写了一遍,有了新的内容
此时,子类的对象,无论是不是转换成了父类的类型,都会执行重写后的该函数