C#-面向对象的三大特性——多态(虚方法与重写、抽象类、接口)

时间:2022-09-01 21:34:46

多态

同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。在运行时,可以通过指向基类的指针,来调用实现派生类中的方法。

编译时的多态性:编译时的多态性是通过重载来实现的。对于非虚的成员来说,系统在编译时,根据传递的参数、返回的类型等信息决定实现何种操作。

运行时的多态性:运行时的多态性就是指直到系统运行时,才根据实际情况决定实现何种操作。C#中,运行时的多态性通过虚成员实现。

编译时的多态性为我们提供了运行速度快的特点,而运行时的多态性则带来了高度灵活和抽象的特点。

  实现多态:

    1. 接口多态性。
    2. 继承多态性。
    3. 通过抽象类实现的多态性。

  override关键字:

   重写父类中的virtual修饰的方法,实现多态。

=====================================================================================================

虚方法与重写

父类中的方法在子类中并不适用,那么子类需要自主更改继承的方法或者是属性,父类中加了virtual关键字的方法才可以被子类重写,子类重写父类的方法使用的是override关键字

定义关键字:虚方法 virtual    重写 override

当实例方法声明包含 virtual 修饰符时,称该方法为虚拟方法。不存在 virtual 修饰符时,称该方法为非虚拟方法。

对于非虚的方法,无论被其所在类的实例调用,还是被这个类的派生类的实例调用,方法的执行方式不变。而对于 虚方法,它的执行方式可以被派生类改变 ,这种改变是通过方法的 重载 来实现的。

1、新建一个父类Fly,新建一个子类Bird,继承Fly,主函数中调用——

C#-面向对象的三大特性——多态(虚方法与重写、抽象类、接口)C#-面向对象的三大特性——多态(虚方法与重写、抽象类、接口)C#-面向对象的三大特性——多态(虚方法与重写、抽象类、接口)

2、新建一个子类Plane,调用父类方法——

C#-面向对象的三大特性——多态(虚方法与重写、抽象类、接口)C#-面向对象的三大特性——多态(虚方法与重写、抽象类、接口)

3、鸟和飞机都会飞,但是飞机不会拍翅膀;又比如儿子继承父亲的自行车,但是继承的自行车座位比较高,不适合自己,需要进行改造,此时怎么办?——虚方法与重写

C#-面向对象的三大特性——多态(虚方法与重写、抽象类、接口)C#-面向对象的三大特性——多态(虚方法与重写、抽象类、接口)

C#-面向对象的三大特性——多态(虚方法与重写、抽象类、接口)C#-面向对象的三大特性——多态(虚方法与重写、抽象类、接口)

=====================================================================================================

抽象类

抽象类的创建是用来作为父类的,无法进行实例化,只能被继承;抽象方法只能在抽象类中,但是抽象类中不一定只有抽象方法,也可以有普通方法。

定义关键字: abstract

抽象类具有以下特性:
  • 抽象类不能实例化。
  • 抽象类可以包含抽象方法和抽象访问器。
  • 不能用 sealed 修饰符修饰抽象类,因为这两个修饰符的含义是相反的。 采用 sealed 修饰符的类无法继承,而 abstract 修饰符要求对类进行继承。
  • 从抽象类派生的非抽象类必须包括继承的所有抽象方法和抽象访问器的实际实现。

1、在父类中用 abstract 修饰类,将类改为抽象类, 将某个方法用 abstract 修饰为抽象方法,此时方法没有函数体

2、在子类中继承父类,用 override 重写抽象方法

3、在主函数中调用

例如:

父类:

C#-面向对象的三大特性——多态(虚方法与重写、抽象类、接口)

子类:

C#-面向对象的三大特性——多态(虚方法与重写、抽象类、接口)

主函数调用:

C#-面向对象的三大特性——多态(虚方法与重写、抽象类、接口)

=====================================================================================================

接口

接口是实现子类继承多个父类方法,如果父类是子类的亲爹,那么接口就是子类的干爹,子类只可以有一个亲爹即父类,但可以有多个干爹即接口。

C#接口作用的深入理解  http://blog.jobbole.com/85751/

1. 接口是一个引用类型,通过接口可以实现多重继承。
2. C#中接口的成员不能有new、public、protected、internal、private等修饰符。
3. 接口中只能声明"抽象"成员(所以不能直接下一步对接口进行实例化(即不能使用new操作符声明一个接口的实例对象)),而不能声明共有的域或者私有的成员变量。
4. 接口声明不包括数据成员,只能包含方法、属性、事件、索引等成员。
5. 接口名称一般都以“I”作为首字母(当然不这样声明也可以),这也是接口和类的一个区别之一。[2] 
6. 接口成员的访问级别是默认的(默认为public),所以在声明时不能再为接口成员指定任何访问修饰符,否则 编译器会报错。
7. 接口成员不能有static、abstract、override、virtual修饰符,使用new修饰符不会报错,但会给出警告说不需要关键字new。
8. 在声明接口成员的时候,不准为接口成员编写具体的可执行代码,也就是说,只要在对接口进行声明时指明接口的成员名称和参数就可以了。
9. 接口一旦被实现,实现类必须实现接口中的所有成员,除非实现类本身是抽象类(通过具体的可执行代码实现接口抽象成员的操作)。
 
例如:
一个完整的人由三个类组成,基础类(吃饭、睡觉)、赚钱接口(技能、地点)、娱乐接口(娱乐1、娱乐2)
要将三个类整合为一个整体,就用到了接口 
1、新建一个为抽象类的基础类作为父类
C#-面向对象的三大特性——多态(虚方法与重写、抽象类、接口)

2、新建两个接口赚钱接口和娱乐接口

C#-面向对象的三大特性——多态(虚方法与重写、抽象类、接口)C#-面向对象的三大特性——多态(虚方法与重写、抽象类、接口)

3、新建一个类 Man 继承其他类,并设置方法,根据需要再新建其他类继承填写信息

C#-面向对象的三大特性——多态(虚方法与重写、抽象类、接口) C#-面向对象的三大特性——多态(虚方法与重写、抽象类、接口)

C#-面向对象的三大特性——多态(虚方法与重写、抽象类、接口)的更多相关文章

  1. java面向对象的三大特性——多态

    多态 所谓多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底 ...

  2. Java面向对象编程三大特性 --- 多态

    多态特性: 子类Child继承父类Father,我们可以编写一个指向子类的父类类型引用,该引用既可以处理父类Father对象,也可以处理子类Child对象,当相同的消息发送给子类或者父类对象时,该对象 ...

  3. C#之抽象类、虚方法、重写、接口、密封类

    前言    学了这么长时间的C#,我想说对于这个东东还是不是特别了解它,以至于让我频频郁闷.每次敲代码的时候都没有一种随心所欲的感觉.所以不得不在网上搜集一些资料,look 了 look~ 内容   ...

  4. python ----面向对象的三大特性---多态

    多态 多态 不同的子类对象调用相同的父类方法,产生不同的执行结果. 以继承和重写父类方法为前提

  5. Java面向对象的三大特性 多态

    多态 对象的多种形态 继承是实现多态的基础 1,引用多态    父类的引用可以指向本类的对象    父类的引用可以指向子类的对象 2,方法多态    创建本类对象时,调用的方法为本类方法    创建子 ...

  6. [.net 面向对象编程基础] (13) 面向对象三大特性——多态

    [.net 面向对象编程基础] (13) 面向对象三大特性——多态 前面两节,我们了解了面向对象的的封装和继承特性,面向对象还有一大特性就是多态.比起前面的封装和继承,多态这个概念不是那么好理解.我们 ...

  7. Java学习笔记二十五:Java面向对象的三大特性之多态

    Java面向对象的三大特性之多态 一:什么是多态: 多态是同一个行为具有多个不同表现形式或形态的能力. 多态就是同一个接口,使用不同的实例而执行不同操作. 多态性是对象多种表现形式的体现. 现实中,比 ...

  8. Python 面向对象(创建类和对象,面向对象的三大特性是指:封装、继承和多态,多态性)

    概念:                                                                                                 ...

  9. Java基础-面向对象第三大特性之多态(polymorphism)

    Java基础-面向对象第三大特性之多态(polymorphism) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.多态概述 多态是继封装,继承之后,面向对象的第三大特性,多态的 ...

随机推荐

  1. ASP.NET执行模型之IIS服务器处理流程

    之前在网上看过很多对这方面的讲解,但个人觉得看下来过于 "深奥",不容易理解,所以想用更简单的方式进行阐述,便于理解. 本次我们重点分析用户请求到页面呈现过程中Web服务器的处理过 ...

  2. poj3186 Treats for the Cows(区间)

    题目链接:http://poj.org/problem?id=3186 题意:第一个数是N,接下来N个数,每次只能从队列的首或者尾取出元素. ans=每次取出的值*出列的序号.求ans的最大值. 样例 ...

  3. iOS开发拓展篇—封装音频文件播放工具类

    iOS开发拓展篇—封装音频文件播放工具类 一.简单说明 1.关于音乐播放的简单说明 (1)音乐播放用到一个叫做AVAudioPlayer的类 (2)AVAudioPlayer常用方法 加载音乐文件 - ...

  4. [gerrit] Auto Add Reviewer When Push Code

    1. ${PROJECT_ROOT}/.git/config 加入如下代码 [remote "review"] url = ssh://${username}@codeserver ...

  5. 每日一九度之 题目1042:Coincidence

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:3007 解决:1638 题目描述: Find a longest common subsequence of two strings. 输入 ...

  6. (原)caffe中通过图像生成lmdb格式的数据

    转载请注明出处: http://www.cnblogs.com/darkknightzh/p/5909121.html 参考网址: http://www.cnblogs.com/wangxiaocvp ...

  7. [Oracle]Audit(二)--清理Audit数据

    在上一篇,初步了解了Audit的作用以及如何使用Audit,本篇记录如何手动清理Audit数据. (一) 概述 Audit的数据主要存储在sys.aud$表中,该表默认位于system表空间中,我们根 ...

  8. 基于FPGA的均值滤波算法的实现

    前面实现了基于FPGA的彩色图像转灰度处理,减小了图像的体积,但是其中还是存在许多噪声,会影响图像的边缘检测,所以这一篇就要消除这些噪声,基于灰度图像进行图像的滤波处理,为图像的边缘检测做好夯实基础. ...

  9. Hadoop MapReduce工作原理

    在学习Hadoop,慢慢的从使用到原理,逐层的深入吧 第一部分:MapReduce工作原理   MapReduce 角色 •Client :作业提交发起者. •JobTracker: 初始化作业,分配 ...

  10. Vue(三)之前端路由

    01-前端路由 1.前端路由的实现原理 vue+vue-router 主要来做单页面应用(Single Page Application) 为什么我们要做单页面应用? (1)传统的开发方式 url改变 ...