标签:刘铁猛 C# 子类 多态 方法 实例 override 父类 重写
重写override
子类中重新定义
父类中已有的方法
重写语法
需要在要重写的父类方法添加一个
virtual修饰符(虚方法)
在子类中的同名方法添加一个
override修饰符
子类中添加新的成员,是继承中对父类的
横向扩展
重写不添加新成员,而是增加已有成员的新版本,可以看着对父类的纵向扩展
但使用
不同类型的实例调用该方法时,
对应的方法版本就会被调用
(活字印刷的实现,一个坑里可以放
同规格的
不同铅字)
重写的条件
要重新的对象必须对子类可见(public或者protected)
方法签名需要一致(方法的参数列表、返回值、方法名)
多态
基于上一节提到的
父类变量可以装子类实例
但调用装着子类实例的变量时,运行的是子类中的方法逻辑
对重写方法,实际执行的方法逻辑是根据
实例的类型
隐藏与重写的区别
若不写virtual和override,则称为 子类对父类成员
隐藏
隐藏父类方法的子类中,还是有
两个版本的该方法
而重写父类方法的子类中,只有
一个版本该方法,那就是重写后的方法
实际工程中几乎不使用隐藏
JAVA中是天然重写,不需要加override和virtual
而在C#中这样写,并不能触发重写,会变成隐藏
方法调用时是顺着变量类型继承链向下找,到实例的类型结束
会找到最新(继承链上在下方的)被重新的方法版本
属性重写
属性的实现是通过get、set方法对字段封装,所以
属性也可以使用重写
语法是在父类属性名前加virtual,子类重新属性名前加override
可以修改其中的逻辑
python中的重写
python中
变量没有类型,实例对象有类型
所以不能用父类变量装子类实例然后调用重写后的方法,没有多态的效果
标签:刘铁猛,
C#,
子类,
多态,
方法,
实例,
override,
父类,
重写
From: https://www.cnblogs.com/jk-2048/p/18030563