C#入门9.13——类的多态
来源:互联网 发布:同济大学软件研究生 编辑:程序博客网 时间:2024/05/01 04:20
在类的继承中,C#允许在基类与派生类中生命具有同名的方法,而且同名的方法可以有不同的代码,也就是说在基类与派生类的相同功能中可以有不同的实现方法,从而为解决同一问题提供多个途径。
多态性就是指在程序运行时,执行的虽然是一个调用方法的语句,却可以根据派生类对象的类型不同完成方法不同的具体实现。
在C#中可以通过多种途径实现多态性。
虚方法:
1.将父类的方法标记为虚方法,使用关键字virtual,此方法在子类中可以重写(使用关键字override)
2.抽象类与抽象方法:如果我们不需要使用父类创建对象,它的存在只是为供子类继承。可以将父类写成抽象(关键字abstract)类,将父类方法写成抽象方法,子类中的方法仍用关键字override重写。
3.接口实现:
我们选择使用虚方法实现多态还是抽象类抽象方法实现多态,取决于我们是否需要使用基类实例化的对象。
抽象类:不需要使用基类实例化的对象。
虚方法:需要使用基类实例化的对象
比如说 现在有一个Clerk类作为基类,ProjectManager类继承自Clerk,这个时候我们就需要使用虚方法来实现多态了,因为我们要使用Clerk创建的对象,这些对象就是普通员工对象。
再比如说,现在有一个Drink类作为基类,Milk,Tea类继承Milk,我们需要使用的是Milk和Tea创建的对象,根本不需要使用Drink创建的对象,所以在这里Drink完全可以写成抽象类。
实例1:职员需要有工作计划,经理也需要有工作计划
虚方法:如果不使用virtual和override,那么子类调用同名函数时,调用的是父类的函数,所以需要虚方法。
class Clerk{public virtual void WorkPlan(){Console.WriteLine("我是职员,我需要有工作计划");}}Class ProjectManager:Clerk{public override void WorkPlan(){Console.WriteLine("我是项目经理,我需要有工作计划");}}state void Main(string[] args){Clerk myClerk=new Clerk();ProjectManager myPM=new ProjectManager();Clerk clerk={myClerk,myPM};foreach(Clerk outclerk in clerk)outclerk.WorkPlan();Console.ReadKey();}
实例2:茶可以解渴,牛奶也可以解渴
abstract class Drink{public abstract void drink();}class Milk:Drink{public override void drink(){cw("我是牛奶,可以解渴");}}class Tea:Drink{public override void drink(){cw("我是茶,可以解渴");}}state void Main(string[] args){Drink myMilk = new Milk();Drink myTea= new Tea();Drink[] drink ={myMilk,myTea};foreach(Drink out drink in drink) outdrink.drink;//抽象类是不允许创建实例的
- C#入门9.13——类的多态
- C#类的入门
- C#入门9.4——类与对象的关系
- C#入门9.12——类的封装
- C#入门9.10——类的继承
- C#入门 类的方法
- C#入门2.1——C#程序结构
- C#入门经典—了解
- C#入门经典—第一章
- C#入门4.8——运算符的优先级
- C#入门6.3——字符串的大小写转换
- C#入门6.4——字符串的比较
- C#入门6.5——字符串的格式化
- C#入门6.6——字符串的截取
- C#入门6.7——字符串的分割
- C#入门6.8——字符串的合并
- C#入门6.9——字符串的插入与填充
- C#入门6.10——字符串的删除
- span margin is not working
- Cmake 编译opengl开源库glfw工程及使用
- 先做个小计划吧
- iOS 服务器文件有修改才进行下载
- iOS录音,调用麦克风话筒
- C#入门9.13——类的多态
- PHP学习:函数
- struts.xml(一)的<action-mappings>标签详解
- Fragment异常:Binary XML file line XXX: Error inflating class fragment
- 看到一张比较好的关于特征工程的图
- CodeForces-710A. King Moves
- 计算机网络-传输层
- android开发艺术探索(四)
- 检测App的内存占用和泄漏