本节内容:

1:多态前戏

2:解决多态的知识点

3:多态两个实例

1:多态前戏

多态源自生活中的现象:

  1. 阿拉甲,阿拉乙,阿拉丙,阿拉丁,是人这个类产生的四个对象;
  2. 他们的父亲说:世界上女的都是女老虎,你们可不要接近啊。。。。
  3. 但是他们四个做出了不同的反应:
  4. 阿拉甲:听了父亲的话,去做了和尚;
  5. 阿拉乙:听了父亲的话,去做了道士;
  6. 阿拉丙:也听了父亲的话,但是他不信,去找女老虎看它是不是女人,结果他挂了;
  7. 阿拉丁:很不听话,找了个女人度过一生。

总结:
多态就是同类物体,对相同情况的不同表现 :
关键字:同一类 、不同表现

c#中的多态如同现实中的多态一样也会出现这两部分内容:
(1)同一类物体:在面向对象中,这个“同一类”指的就是他们所属的父类。所以说c#中离不开继承这个概念 。
(2)不同表现是指同属于这个基类的所有子类在表现类的行为的时候有不同的表现;

2:解决多态必备知识点

在说多态的时候我们要解决两个知识点:

1:赋值

  1. ()相同类型对象之间是可以直接相互赋值,但是传递的是对象的地址而不是内容。
  2. ()子类的对象可以直接赋值给父类的对象
  3. ()父类的对象无法赋值给子类的对象,
  4. ()当子类的对象赋值给父类的对象的时候,父类对象只能看到本类内部的成员,而无法看到子类中的那些成员。

2:实现多态的实现方式:

  1. 1)虚方法:
  2. 将父类的方法标记为虚方法,使用关键字virtual,此方法在子类可以重写(关键字override
  3. 2)抽象类与抽象方法
  4. 如果我们不需要使用父类创建的对象,他的存在只是为了供子类继承,我们可以将父类
  5. 写成抽象类(abstract),父类的方法也要修饰成(abstract),而子类还是使用override
  6. 3)接口实现 (暂时不讲)

3:多态两个实例

1:职员需要有员工计划,经理也需要有工作计划。  这里我们经理呢也是员工的组成部分,所以员工类就是一个基类。经理去继承它。

ProjectManage类

  1. class ProjectManage : Clerk
  2. {
  3. public override void workplan()
  4. {
  5. Console.WriteLine("我是一个经理,我有工作计划");
  6. }
  7. public void pmshow()
  8. {
  9. Console.WriteLine("this is pjshow");
  10. }
  11. }

Cleik类

  1. class Clerk
  2. {
  3. public virtual void workplan() {
  4. Console.WriteLine(@"我是一个员工,我有工作计划");
  5. }
  6. public void show() {
  7. Console.WriteLine("this is test");
  8. }
  9. }

program类

  1. class Program
  2. {
  3. static void Main(string[] args)
  4. {
  5. Clerk zs = new Clerk();
  6. zs.workplan();
  7. Clerk jl = new ProjectManage(); //将子类的对象传给父类声明,父类调用其中子类的方法;
  8. jl.workplan();
  9. jl.show(); //只能看到父类的中的方法,而无法看到子类中的成员
  10. Console.ReadKey();
  11. }
  12. }

输出结果:

2:茶可以解渴,牛奶也可以解渴。 茶类和牛奶都不存在相互继承的关系,我们需要抽象化一个类出来。 让茶类和牛奶类都继承它;

drink类

  1. abstract class drink //抽象abstract类,要求方法也是abstract 且不能有结构体;
  2. {
  3. public abstract void Func();
  4. }

Tea类

  1. class Tea : drink
  2. {
  3. public override void Func()
  4. {
  5. Console.WriteLine("茶叶可以解渴");
  6. }
  7.  
  8. }

Mile类

  1. class Milk : drink
  2. {
  3. public override void Func()
  4. {
  5. Console.WriteLine("牛奶可以解渴");
  6. }
  7. }

Program类

  1. class Program
  2. {
  3. static void Main(string[] args)
  4. {
  5. Tea mytea = new Tea();
  6. Milk mymilk = new Milk();
  7. drink [] _drink = {mytea,mymilk}; //将子类的实例化对象,赋值给drink类的数组中去
  8.  
  9. foreach (drink item in _drink) {
  10. item.Func();
  11. }
  12.  
  13. Console.ReadKey();
  14. }
  15. }

输出:

c# 第35节 类的多态的更多相关文章

  1. 第二十九节:Java基础知识-类,多态,Object,数组和字符串

    前言 Java基础知识-类,多态,Object,数组和字符串,回顾,继承,类的多态性,多态,向上转型和向下转型,Object,数组,多维数组,字符串,字符串比较. 回顾 类的定义格式: [类的修饰符] ...

  2. Python类的多态的例子

    1 # -*- coding: utf-8 -*- 2 # 类的多态 3 4 # 定义Person父类 5 class Person(object): 6 def __init__(self, nam ...

  3. Android零基础入门第35节:Android中基于回调的事件处理

    原文:Android零基础入门第35节:Android中基于回调的事件处理 通过前面两期掌握了Android中基于监听的事件处理的五种形式,那么本期一起来学习Android中基于回调的事件处理. 一. ...

  4. .NET Core CSharp初级篇 1-6 类的多态与继承

    .NET Core CSharp初级篇 1-6 本节内容为类的多态与继承 简介 终于讲到了面向对象三大特性中的两大特性--继承与多态.通过继承与多态,我们能很好的将类的拓展性发挥到了极致.在下面的内容 ...

  5. C# 类的多态、结构、接口、抽象、虚函数总结

    多态: 类的多态是通过在子类(派生类)中重载基类的虚方法或成员函数来实现的. 可见,重载和虚函数的重写,并在调用时用父类装箱子类对象,是实现多态的一种重要的编程方式. 接口: 接口是一种用来定义程序的 ...

  6. Python 类的多态的运用

    #类的多态的运用 #汽车类 class Car(object): def move(self): print("move ...") #汽车商店类 class CarStore(o ...

  7. day21-5 类的多态与多态性

    类的多态与多态性 多态 多态指的是一类事物有多种形态,如动物有多种形态:人.狗.猪 import abc class Animal(metaclass=abc.ABCMeta): # 同一类事物:动物 ...

  8. Java类的多态机制

    Java中将一个方法调用同一个方法主体关联起来被称作绑定. 绑定分为前期绑定和后期绑定.前期绑定是在编译器决定的,而后期绑定是在程序运行时决定的.Java中除了static方法和final方法(pri ...

  9. day18-Python运维开发基础(单继承 / 多继承 / 菱形继承、类的多态)

    1. 单继承 / 多继承 / 菱形继承 # ### 继承 : 一个类除了自身所拥有的属性方法之外,还获取了另外一个类的成员属性和方法 """ 一个类可以继承另外一个类,那 ...

随机推荐

  1. ElasticSearch7 设置外网访问失败

    elasticsearch外网访问9200端口失败,bootstrap checks failed,the default discovery settings are unsuitable for ...

  2. (入门SpringBoot)SpringBoot加接口操作日志好方法(九)

    用Spring的切面去做,慕课网上的大神的小妙招,被我拷贝下来了.import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotati ...

  3. 你的学习方法怎么样?IT的学习方法应该是什么-Dotest

    OK,自从你打开这个文章,那么一定跟我有类似的困惑. 建议1)IT的东西没有背诵的,要做.要做,一定要动手做: 2)讨论.讨论,一定要多讨论.在讨论过程中,以往的不理解问题,可能就迎刃而解了: 3)知 ...

  4. macOS 安装 Docker Desktop CE(转)

    现在基本上都使用docker进行部署项目,所以还是有必要学习下,关于docker的简介这里就不在描述,本文转载自https://yeasy.gitbooks.io/docker_practice/co ...

  5. 推荐|MathType的使用技巧

    前言 持续更新中,敬请期待... 数学学科 制作新的数学符号 不包含于符号:输入$\not\subseteq,然后按回车键enter即可: 分式\(\cfrac{3-x}{2x-1}\)符号:输入$\ ...

  6. vscode相关设置

    一.如何设置vs每次点击文件打开新的窗口: 1.打开设置 2.搜索:"workbench.editor.enablePreview" 3.设置"workbench.edi ...

  7. js的事件循环(Event Loop)

    (本文从掘金小册整理) 首先介绍一下几个概念 进程与线程 相信大家经常会听到 JS 是单线程执行的,但是你是否疑惑过什么是线程? 讲到线程,那么肯定也得说一下进程.本质上来说,两个名词都是 CPU 工 ...

  8. 基于python的selenium常用操作方法(1)

    1 selenium定位方法    Selenium提供了8种定位方式. ·         id ·         name ·         class name ·         tag ...

  9. 使用csv模块读写csv格式文件

    import csv class HandleCsv: ''' csv文件处理类 ''' def __init__(self, filename): ''' 构造器 :param filename: ...

  10. 什么是SFP光模块?

    什么是光模块? 光模块(optical module)由光电子器件.功能电路和光接口等组成,光电子器件包括发射和接收两部分.简单的说,光模块的作用就是光电转换,发送端把电信号转换成光信号,通过光纤传送 ...