本节内容:

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();
}
}

输出:

最新文章

  1. Spring mvc example
  2. a* products
  3. Unity3D热更新全书-脚本(一) 初识脚本
  4. Security » Authorization » 介绍
  5. java反射保存
  6. Linux下查找包含BOM头的文件和清除BOM头命令 2014-08-16 12:30:50
  7. 第八章 标准IO库
  8. AlphaGo 已经战胜了李世石,而你还不知道什么是机器学习?
  9. Java基础学习中一些词语和语句的使用
  10. Tomcat 性能调优 出现java.lang.OutOfMemoryError: PermGen space
  11. BDD框架之lettuce---python3.+安装报错
  12. rapidPHP 1.1.0 介绍
  13. 关于appcompat_v7兼容包的详细说明
  14. source insight 中tab键的设置
  15. Akka实践一些总结
  16. 问题记录2019-03-06(todo)
  17. python笔记17-全局变量、局部变量
  18. 如何使用Beyond Compare 对比差异文件【制作Patch(补丁包)文件】
  19. c++  与  java  中的 继承
  20. C++ Jsoncpp源代码编译与解析Json

热门文章

  1. 初级模拟电路:3-9 BJT三极管实现逻辑门
  2. 小计C++中的引用和vector
  3. Python函数名做参数,闭包,装饰器
  4. JDBC简介(一)
  5. C# Stack 集合学习
  6. Noip2017Day1T3 逛公园
  7. 使用canal增量同步mysql数据库信息到ElasticSearch
  8. HTML连载48-清除浮动的其中两种方式
  9. spring cloud 2.x版本 Gateway熔断、限流教程
  10. spring cloud 2.x版本 Config配置中心教程