【c#视频】——面向对象——多态
多态:同一操作作用于不同的对象,可以有不同的解释,产生不同的结果。也就是说,同一个类型的实例调用“相同”的方法,产生的结果是不同的,这里的“相同”打上双引号是因为这里的相同的方法仅仅是看上去相同的方法,实际上它们调用的方法是不同的。
- 重载(overload)
- 重写(override)
- 虚方法(virtual)
- 抽象方法(abstract)
- 隐藏方法(new)
重载(overload)
在同一个作用域(一般指一个类)的两个或多个方法函数名相同,参数列表不同的方法叫做重载,它们有三个特点。
- 方法名必须相同
- 参数列表必须不相同
- 返回值类型可以不相同
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关键字,它的特点(三个相同)。
- 相同的方法名
- 相同的参数列表
- 相同的返回值
父类中的定义:
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#视频】——面向对象——多态相关推荐
- day8 Java学习(面向对象.多态接口)
面向对象 多态: 概述:事物存在的多种形态. 多态前提: *要有继承关系 *要有方法重写 *要有父类引用指向子类对象. 成员变量访问: 编译看左边(父类),运行左边(父类) ...
- Java面向对象 ----多态
java的第二部分 面向对象----多态 4.1面向对象的第三个特征: 多态定义: 多态可以理解为某一类事物的多种存在形态. 例如: 人 可以分为 男人 女人 动物 猫 狗 等 粮食 大米 小麦等 举 ...
- 7.Java面向对象-多态
7.Java面向对象-多态 一.多态的概述及其代码体现 A:多态概述某一个事物,在不同时刻表现出来的不同状态.举例: Cat c=new Cat();Animal a=new Cat();猫可以是猫的 ...
- java面向对象解决兔子问题_7-Java面向对象-多态
多态: 多种形态,面向对象的核心,封装和继承都是为多态而服务的. 位于最后也是最重要的. 本次课程围绕: 什么是多态? 多态在程序设计中的优势? 在Java中如何实现多态? 多态的概念 猫,狗,兔子都 ...
- linkin大话面向对象--多态
java引用变量有2个类型,一个是编译时类型,一个是运行时类型: 编译时类型:声明的类型,把它看做是什么东西 运行时类型:真正的类型,实际上指的是什么东西 如果编译时类型和运行时类型不同,就出现多态. ...
- 【设计模式】面向对象 - 多态 ( 面向对象 3 要素 | 多态 提升 程序扩展性 | 多态示例 )
文章目录 一.面向对象 3 要素 二.多态 ( 提升程序扩展性 ) 三.不使用多态示例 四.使用多态示例 总结 一.面向对象 3 要素 面向对象 333 要素 : 封装 : 解决 安全性 问题 ; 通 ...
- java 多态_Java面向对象 —— 多态
前两天已经相继介绍了Java面向对象的三大特性之中的封装.继承,所以今天就介绍Java面向对象的三大特性的最后一项,多态~ 首先讲一下什么是多态,以及多态需要注意的细节 什么是多态:一个对象具备多种形 ...
- java面向对象多态特性
一.多态的概念 多态是继封装,继承之后,面向对象的三大特性. 现实事物经常会体现出多种形态,如学生,学生是人的一种,则一个具体的张三同学既是学生也是人,即出现两种形态. java作为面向对象的语言,同 ...
- php 多态有什么用,php面向对象多态的介绍与优势
/* 1.多态的介绍与优势 (1)多态的意思是"多种形态" (2)多态根据对象类型不同来以不同方式处理 (3)多太的优势:面向对象不仅仅是把类继承起来,还能通过多太方式,来根据对象 ...
最新文章
- sql server 2008学习7 规范化和其他基本设计问题
- TensorFlow 变量共享,命名空间
- mysql主键自增长_全面的MySQL优化面试解析
- 那些年,我在游戏开发中改过的bug:靠不住的OS和SDK
- 用OKR拆解法,做产品规划
- 安利一个黑科技!还有两款电视盒子播影神器,放假了应该用得到~
- c语言程序有哪几类词汇,c语言是什么 必背词汇有哪些
- 计算机如何通过手机连接网络打印机,怎样连接网络打印机【图文教程】
- 【基础篇】Navicat让MySQL数据库可视化
- 【开源系列】三国演义LBS (二)游戏策划案
- (附源码)Python在线办公系统 毕业设计 071116
- 3dmm人脸配准/重建:gold standard algorithm
- 低频电子线路学习笔记
- 利用python爬取丁香医生上新型肺炎数据,并下载到本地,附带经纬度信息
- android 7.0之后的打开相机拍摄头像上传
- 图片轮播的实现(详解两种方法)
- 阿里企业邮箱526 Authentication failure
- app和bootloader跳转 MSP与PSP
- BlackBerry手机上Java程序如何判断当前手机使用的运营商网络名称?网路制式?...
- Torrance–Sparrow BRDF Model公式推导
热门文章
- oracle 每个月求本年该月及之前的合计
- Firewald防火墙
- Object.keys()、Object.values()、Object.entries()的用法
- 汇编语言之Debug教程篇
- 使用pandas把某一列的字符值转换为数字
- 简单搭建微服务springCloudNetflix服务(一)
- 中国网爪(china claw) 最终测试版 绿色软件联盟
- C语言报名里面培训怎么填,庄河c语言编程学习,庄河学c语言编程培训,庄河学c语言编程报个培训班怎么样...
- jQuery mobile插件基础知识笔记
- 微服务项目实战技术点汇总:“尚硅谷的谷粒在线教育”七、redis数据库缓存页面数据、使用NUXT框架搭建前台系统环境、前台系统页面、首页轮播图(banner数据显示)、首页热门课程,名师推荐