##重写和多态
现在构成的不是override重写,要重写的话,要在父类成员标记上virtual,子类成员标记上override才行。
运行后是Car is running
此时是I‘m running
调用过哪个版本的方法是与实例相关联的版本
如果不加virtual和override叫做子类对父类成员的隐藏,此时子类的run方法会覆盖父类的方法。
此时是Car is running
v变量虽然是vehicle类型,但它引用的版本是car类型的实例,与car类型的实例相关联的版本是car isrunning
父类的变量引用一个子类的实例,调用被重写的成员的时候,总能调用到一个最新的版本,这就叫多态。
将raseccar中的override去掉,此时应该打印出 car is running
v变量虽然是vehicle类型,但它引用的版本是Rasecar类型的实例,与Rasecar类型的实例相关联的最新版本是car is running(Rasecar相当于都两个run方法,一个是继承下来的,一个自己写的。v调用时是顺着继承链往下调用的,到car就停了)
如果想调用rasecar中的在最新版本,必须声明rasecar类型变量
重写和多态一般用在方法和属性的重写中。
重写属性:
car类中对speed属性的重写
重写发生的条件:
必须是函数成员
public 和protected时对子类是可见的,此时可以重写
签名一致:参数名和列表一致