面向对象编程三大特点  封装 继承 多态。今天我把自己学习多态的过程进行总结

多态 就是 同一个方法在不同情况下,会表选不同的效果(多个形态)。在代码上表现就是 同一个父类对象 赋予不同的子类对象 就会发生不同的效果。其本质就是 里氏转换

1、子类可以赋值给父类    2、如果父类中装的是子类对象,则可以将这个父类转换为对应的子类对象

作用:我们可以将所有的子类都当做是父类来看,针对父类进行编程,写出通用的代码,适应需求的不断改变。

父类 ss= new 子类();

注意  1、当1个父类变量指向了1个子类对象 只能通过这个父类变量调用父类的成员. 子类独有的成员无法调用.

多态有三种实现方法

--->虚方法

virtual override  //是普通的类,有意义的 可以创建对象

//如果子类重写了父类的虚方法. 那么通过父类变量来调用这个方法的时候 会调用子类的.

--->抽象类

abstract override   只能是抽象类,无意义的 不能创建对象

只声明方法,不去实现方法,让继承的类去实现(光说不做)

--->接口  Interface只定义方法,只定义规范,让实现这个接口的类,去实现里面的方法

多个类具有相同的行为但没有共同父类可以使用接口。

虚方法:很平常的类,只需要在需要重写的方法前面 添加 virtual ,就可以被子类重写,而virtual 本身所在的方法也是有意义,可以使用的。

例子:

class    Employee //父类
{
public virtual void DaKa()
{
Console.WriteLine("员工九点打卡");
}
}

class  Manager : Employee   //子类
{
public override void DaKa()
{
Console.WriteLine("经理11点打卡");
}
}

Employee emp = new Manager();

emp.DaKa();  // 经理11点打卡


抽象类:专门用来抽象出公共的方法和属性。进行共用的。所以他是无意义的,不能创建对象。只声明方法,不去实现方法,让继承的类去实现(光说不做),

抽象成员只能出现在抽象类中,抽象类中也可以有其他的普通成员。一个子类继承了一个抽象的父类,那么这个子类必须重写这个抽象父类中的所有抽象成员  所以当我们调用对象时    抽象类 ss= new 子类();     这个时候 我们所能调用的是父类的成员,但是子类重写的成员,就是子类重写后的

接口:接口是一种规范。也是一种能力。只要一个类继承了一个接口,这个类就必须实现这个接口中所有的成员。接口的功能要单一。也就是说,接口不能new(不能创建对象)。实现接口的子类必须实现该接口的全部成员。

一个类可以同时继承一个类并实现多个接口,如果一个子类同时继承了父类A,并实现了接口IA,那么语法上A必须写在IA的前面。  class MyClass:A,IA{},因为类是单继承的。

例子:

class Driver : Person, IKouLan
{
public void KouLan()
{
Console.WriteLine("司机也可以扣篮");
}
} interface IKouLan //表示可以扣篮的一种能力
{
void KouLan();
} class NBAPlayer : Person
{
public void KouLan()
{
Console.WriteLine("NBA球员可以扣篮");
}
}
class Person
{
public void CHLSS()
{
Console.WriteLine("人类可以吃喝拉撒睡");
}
}

//实现多态
IKouLan kl = new Driver();//new Teacher();//new Student();
kl.KouLan();
Console.ReadKey();

经验:抽象类也可以继承接口,只要继承接口的都必要实现接口,所以抽象类也要实现接口。尽量不要出现这种情况让抽象类去实现接口,接口代表能力,子类有能力就实现接口,没能力就不去实现接口,如果都需要,那就直接写到父类中,不需要写到接口中让抽象类去实现。

 

C#多态学习总结的更多相关文章

  1. luogg_java学习_07_抽象类_接口_多态学习总结

    这篇博客总结了半天,希望自己以后返回来看的时候理解更深刻,也希望可以起到帮助初学者的作用. 转载请注明 出自 : luogg的博客园 , 抽象 一种专门用来做父类,被继承的. (模板) 格式: abs ...

  2. JAVA多态学习3

    这一节我们来学习抽象类 抽象类–深入讨论 抽象类是java中一个比較重要的类. 1.用abstract关键字来修饰一个类时.这个类就是抽象类. 2.用abstract关键字来修饰一个方法时,这种方法就 ...

  3. Java多态学习笔记

    面向对象三大特性:封装,继承和多态.其中,封装,继承都比较通俗易懂,唯有多态令我甚是头疼.经过仔细研究之后,终于搞懂了一点,特来做一个分享.独乐乐不如众乐乐. 何为多态?多态的本质是:一个程序中同名的 ...

  4. JAVA多态学习1

    多态–概念 所谓多态.就是指一个引用(类型)在不同情况下的多种状态. 也能够理解成:多态是指通过指向父类的指针,来调用在不同子类中实现的方法. 实现多态有两种方式:1.继承.2.接口 这一次我们先来演 ...

  5. c#中的多态学习总结

    c#的多台方法,大体上和c++的类似,但是有点区别的,我这里刚刚初学,因此把重点记录下. 多态是同一个行为具有多个不同表现形式或形态的能力. 多态性意味着有多重形式.在面向对象编程范式中,多态性往往表 ...

  6. JAVA多态学习2

    好啦,这里紧接着上次没说的向下转型,请读者结合上次讨论的向上转型的样例一起探讨(事实上本次代码也有加上,放心). 我们这里希望从向下转型会出现的两种基本情况进行探讨 package downcasti ...

  7. Java学习之多态

    多态的概念 多态==晚绑定. 不要把函数重载理解为多态. 因为多态是一种运行期的行为,不是编译期的行为. 多态:父类型的引用可以指向子类型的对象. 比如 Parent p = new Child(); ...

  8. Java学习之 多态 Polymorphism

    转自:http://www.cnblogs.com/mengdd/archive/2012/12/25/2832288.html 多态的概念 多态==晚绑定. 不要把函数重载理解为多态. 因为多态是一 ...

  9. python面向对象(封装,继承,多态)

    python面向对象(封装,继承,多态) 学习完本篇,你将会深入掌握 如何封装一个优雅的借口 python是如何实现继承 python的多态 封装 含义: 1.把对象的属性和方法结合成一个独立的单位, ...

随机推荐

  1. 生成SSH密钥过程

    1.查看是否已经有了ssh密钥:cd ~/.ssh 如果没有密钥则不会有此文件夹,有则备份删除 2.生存密钥: $ ssh-keygen -t rsa -C "name@doumi.com& ...

  2. Spark原理概述

    原文来自我的个人网站:http://www.itrensheng.com/archives/Spark_basic_knowledge 一. Spark出现的背景 在Spark出现之前,大数据计算引擎 ...

  3. reStructuredText语法

    reStructuredText 除了makedown语法这还存在另一种语法reStructuredText 相对Markdown来说,在写书方面更有优势: 使用sphnix能够自动生成目录和索引文件 ...

  4. HTML5 canvas自制画板

    找到一个画板的插件,很好用,点击下载  ,页面很简单,但是呢,貌似不适用于手机端,,,

  5. robotframe常用的类库、对应的方法和属性

    robotframe常用的类库.对应的方法和属性

  6. LOJ 6279 数列分块入门3

    嗯... 题目链接:https://loj.ac/problem/6279 这道题在分块的基础上用vc数组记录,然后最后分三块,两边暴力枚举找前驱,中间lower_bound找前驱. AC代码: #i ...

  7. 【嵌入式】ARM9复习

    一.嵌入式系统基础 二.ARM处理器 1. 在每条指令后,用;//注释这条指令的寻址方式,以及实现的功能(25分) 注:变址寻址需要标注是基址加偏移.还是基址加索引,是前变址还是后变址.SUB SP, ...

  8. 实验1 GIT代码版本管理

    (一)实验目的: 1)了解分布式分布式版本控制系统的核心机理: 2) 熟练掌握git的基本指令和分支管理指令: (二)实验内容: 1)安装git 2)初始配置git ,git init git sta ...

  9. 《Web安全攻防 渗透测试实战指南 》 学习笔记 (三)

    Web安全攻防 渗透测试实战指南   学习笔记 (三) burp suite详解                                                 是一款集成化渗透测试工 ...

  10. Perl 笔记

    目录 Perl 学习 常用记录 基础 1. 运行perl 2. 字符串 3. 变量 4. 条件 5. 循环 6. 运算符 7. 时间日期 8. 子程序(函数) 9. 引用 10. 格式化输出 11. ...