多态:同一操作作用于不同的对象,可以有不同的解释,产生不同的结果。也就是说,同一个类型的实例调用“相同”的方法,产生的结果是不同的,这里的“相同”打上双引号是因为这里的相同的方法仅仅是看上去相同的方法,实际上它们调用的方法是不同的。

  • 重载(overload)
  • 重写(override)
  • 虚方法(virtual)
  • 抽象方法(abstract)
  • 隐藏方法(new)

重载(overload)

在同一个作用域(一般指一个类)的两个或多个方法函数名相同,参数列表不同的方法叫做重载,它们有三个特点。

  1. 方法名必须相同
  2. 参数列表必须不相同
  3. 返回值类型可以不相同
public static int AddNumber(int num1,int num2)
{return num1+num2;
}
public static double AddNumber(double num1,double num2)
{return num1+num2;
}
public static double AddNumber(double num1,int num2)
{return num1+num2;
}

重写(override)

子类中为满足自己的需求来重复定义某个方法的不同实现,需要用override关键字。被重写的方法必须是虚方法,用的是virtual关键字,它的特点(三个相同)。

  1. 相同的方法名
  2. 相同的参数列表
  3. 相同的返回值

父类中的定义:

public virtual void EatFood()
{Console.WriteLine("Animal吃东西");
}

子类中的定义:

public override void EatFod()
{Console.WriteLine("Cat吃东西");
}

虚方法(virtual)

即为基类中定义的允许在派生类中重写的方法,使用virtual关键字定义。

public virtual void EatFood()
{Console.WriteLine("Animal吃东西");
}

注意:虚方法也可以被直接调用。如:

Animal a =new Animal();
a.EatFood();

抽象方法(abstract)

在基类中定义的并且必须在派生类中重写的方法,使用abstract关键字定义。抽象方法必须在抽象类中,抽象类无法实例化,父类是抽象类,子类继承了这个类,必须把抽象类中的抽象方法重写。

public abstract class Animal
{public abstract void Shout();
}
public class Pig:Animal
{public override void Shout(){Console.WriteLine("哼哼叫");}
}

隐藏方法(new)

在派生类中定义的和基类中的某个方法同名的方法,使用new关键字定义。
隐藏方法不但可以隐藏基类中的虚方法,而且也可以隐藏基类中的非虚方法。
隐藏方法中父类的实例调用父类的方法,子类的实例调用子类的方法。

public void Sleep()
{Console.WriteLine("Animal Sleep");
}

则在派生类Cat中定义隐藏方法的代码为:

new public void Sleep()
{Console.WriteLine("Cat Sleep");
}

或者为:

public new void Sleep()
{Console.WriteLine("Cat Sleep");
}

来一个总结性的代码:

class Program
{static void Main(string[] args){//Animal的实例Animal a =new Animal();//Animal的实例,引用派生类Cat对象Animal ac =new Cat();//Animal的实例,引用派生类Dog对象Animal ad =new Dog();//Cat的实例Cat c=new Cat();//Dog的实例Dog d=new Dog();//重载a.Sleep();a.Sleep(23);//重写和虚方法a.EatFood();ac.EatFood();ad.EatFood();//抽象方法a.Live();//隐藏方法a.Sleep();ac.Sleep();c.Sleep();Console.ReadKey();}
}

小编还在努力加载中……T_T

【c#视频】——面向对象——多态相关推荐

  1. day8 Java学习(面向对象.多态接口)

    面向对象    多态: 概述:事物存在的多种形态.  多态前提: *要有继承关系 *要有方法重写 *要有父类引用指向子类对象. 成员变量访问:           编译看左边(父类),运行左边(父类) ...

  2. Java面向对象 ----多态

    java的第二部分 面向对象----多态 4.1面向对象的第三个特征: 多态定义: 多态可以理解为某一类事物的多种存在形态. 例如: 人 可以分为 男人 女人 动物 猫 狗 等 粮食 大米 小麦等 举 ...

  3. 7.Java面向对象-多态

    7.Java面向对象-多态 一.多态的概述及其代码体现 A:多态概述某一个事物,在不同时刻表现出来的不同状态.举例: Cat c=new Cat();Animal a=new Cat();猫可以是猫的 ...

  4. java面向对象解决兔子问题_7-Java面向对象-多态

    多态: 多种形态,面向对象的核心,封装和继承都是为多态而服务的. 位于最后也是最重要的. 本次课程围绕: 什么是多态? 多态在程序设计中的优势? 在Java中如何实现多态? 多态的概念 猫,狗,兔子都 ...

  5. linkin大话面向对象--多态

    java引用变量有2个类型,一个是编译时类型,一个是运行时类型: 编译时类型:声明的类型,把它看做是什么东西 运行时类型:真正的类型,实际上指的是什么东西 如果编译时类型和运行时类型不同,就出现多态. ...

  6. 【设计模式】面向对象 - 多态 ( 面向对象 3 要素 | 多态 提升 程序扩展性 | 多态示例 )

    文章目录 一.面向对象 3 要素 二.多态 ( 提升程序扩展性 ) 三.不使用多态示例 四.使用多态示例 总结 一.面向对象 3 要素 面向对象 333 要素 : 封装 : 解决 安全性 问题 ; 通 ...

  7. java 多态_Java面向对象 —— 多态

    前两天已经相继介绍了Java面向对象的三大特性之中的封装.继承,所以今天就介绍Java面向对象的三大特性的最后一项,多态~ 首先讲一下什么是多态,以及多态需要注意的细节 什么是多态:一个对象具备多种形 ...

  8. java面向对象多态特性

    一.多态的概念 多态是继封装,继承之后,面向对象的三大特性. 现实事物经常会体现出多种形态,如学生,学生是人的一种,则一个具体的张三同学既是学生也是人,即出现两种形态. java作为面向对象的语言,同 ...

  9. php 多态有什么用,php面向对象多态的介绍与优势

    /* 1.多态的介绍与优势 (1)多态的意思是"多种形态" (2)多态根据对象类型不同来以不同方式处理 (3)多太的优势:面向对象不仅仅是把类继承起来,还能通过多太方式,来根据对象 ...

最新文章

  1. sql server 2008学习7 规范化和其他基本设计问题
  2. TensorFlow 变量共享,命名空间
  3. mysql主键自增长_全面的MySQL优化面试解析
  4. 那些年,我在游戏开发中改过的bug:靠不住的OS和SDK
  5. 用OKR拆解法,做产品规划
  6. 安利一个黑科技!还有两款电视盒子播影神器,放假了应该用得到~
  7. c语言程序有哪几类词汇,c语言是什么 必背词汇有哪些
  8. 计算机如何通过手机连接网络打印机,怎样连接网络打印机【图文教程】
  9. 【基础篇】Navicat让MySQL数据库可视化
  10. 【开源系列】三国演义LBS (二)游戏策划案
  11. (附源码)Python在线办公系统 毕业设计 071116
  12. 3dmm人脸配准/重建:gold standard algorithm
  13. 低频电子线路学习笔记
  14. 利用python爬取丁香医生上新型肺炎数据,并下载到本地,附带经纬度信息
  15. android 7.0之后的打开相机拍摄头像上传
  16. 图片轮播的实现(详解两种方法)
  17. 阿里企业邮箱526 Authentication failure
  18. app和bootloader跳转 MSP与PSP
  19. BlackBerry手机上Java程序如何判断当前手机使用的运营商网络名称?网路制式?...
  20. Torrance–Sparrow BRDF Model公式推导

热门文章

  1. oracle 每个月求本年该月及之前的合计
  2. Firewald防火墙
  3. Object.keys()、Object.values()、Object.entries()的用法
  4. 汇编语言之Debug教程篇
  5. 使用pandas把某一列的字符值转换为数字
  6. 简单搭建微服务springCloudNetflix服务(一)
  7. 中国网爪(china claw) 最终测试版 绿色软件联盟
  8. C语言报名里面培训怎么填,庄河c语言编程学习,庄河学c语言编程培训,庄河学c语言编程报个培训班怎么样...
  9. jQuery mobile插件基础知识笔记
  10. 微服务项目实战技术点汇总:“尚硅谷的谷粒在线教育”七、redis数据库缓存页面数据、使用NUXT框架搭建前台系统环境、前台系统页面、首页轮播图(banner数据显示)、首页热门课程,名师推荐