本节内容:

1:多态前戏

2:解决多态的知识点

3:多态两个实例

1:多态前戏

多态源自生活中的现象:

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

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

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

2:解决多态必备知识点

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

1:赋值

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

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

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

3:多态两个实例

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

ProjectManage类

class ProjectManage : Clerk
{
public override void workplan()
{
Console.WriteLine("我是一个经理,我有工作计划");
}
public void pmshow()
{
Console.WriteLine("this is pjshow");
}
}

Cleik类

class Clerk
{
public virtual void workplan() {
Console.WriteLine(@"我是一个员工,我有工作计划");
}
public void show() {
Console.WriteLine("this is test");
}
}

program类

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

输出结果:

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

drink类

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

Tea类

class Tea : drink
{
public override void Func()
{
Console.WriteLine("茶叶可以解渴");
} }

Mile类

class Milk : drink
{
public override void Func()
{
Console.WriteLine("牛奶可以解渴");
}
}

Program类

class Program
{
static void Main(string[] args)
{
Tea mytea = new Tea();
Milk mymilk = new Milk();
drink [] _drink = {mytea,mymilk}; //将子类的实例化对象,赋值给drink类的数组中去 foreach (drink item in _drink) {
item.Func();
} Console.ReadKey();
}
}

输出:

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. sshd 启动后 出现:Could not load host key: /etc/ssh/ssh_host_rsa_key

    今天在启动sshd时,出现了如下问题,导致客户端不能成功连接服务端,不能建立ssh连接: 有两个提示 Could not load host key: /etc/ssh/ssh_host_rsa_ke ...

  2. Linux-3.14.12内存管理笔记【构建内存管理框架(1)】

    传统的计算机结构中,整个物理内存都是一条线上的,CPU访问整个内存空间所需要的时间都是相同的.这种内存结构被称之为UMA(Uniform Memory Architecture,一致存储结构).但是随 ...

  3. div里面的元素在【垂直 方向】上水平分布 使用calc()函数动态计算

    1==>如何让div里面的元素在[垂直 方向]上水平分布.important-dec{ height: 121px; //必须固定高度 flex-direction: column; //垂直排 ...

  4. 解决“QGtkStyle could not resolve GTK……”问题

    如果出现错误 QGtkStyle could not resolve GTK. Make sure you have installed the proper libraries 或者出现错误 err ...

  5. Educational Codeforces Round 76 (Rated for Div. 2) C. Dominated Subarray 水题

    C. Dominated Subarray Let's call an array

  6. SQLite安装及使用教程

    SQLite是一款轻型的嵌入式关系数据库,轻量级,效率高,操作起来也特别方便 我们今天来讲解一下SQLite的安装和一些基本操作 SQLite下载 如果是64位机,下载下面的两个解压就好 在dos界面 ...

  7. 可迭代对象(__iter__()和__next__())

    如果一个类想被用于for ... in循环,类似list或tuple那样,就必须实现一个__iter__()和__next__()方法,该方法返回一个迭代对象 然后,Python的for循环就会不断调 ...

  8. 扎心一问!你凭什么成为top1%的Java工程师?

    目录 1.解决生产环境里的突发故障 2.对棘手的线上性能问题进行优化 3.锻造区别于普通码农的核心竞争力 4.打磨架构设计能力 5.你凭什么成为 top1%?   你工作几年了? 是否天天CRUD到吐 ...

  9. git报错:fatal: bad config line 1 in file C:/Users/JIANGXIAOLIANG/.gitconfig

    在给git设置用户名和邮箱的时候报下面的错误:fatal: bad config line 1 in file C:/Users/JIANGXIAOLIANG/.gitconfig看提示的意思是git ...

  10. Vue模板语法中数据绑定

    1.单项数据绑定 <div id="di"> <input type="text" :value="input_val"& ...