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

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

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. Spring - MVC - 修改 Java 类后, 触发重启

    1. 概述 学习 Spring MVC 下, 如何可控的触发重启 2. 背景 学习 Spring 场景 有些时候, 改完类, 需要重启 之前有听说, Spring MVC 可以自动重启 于是想, 尝试 ...

  2. python的scribe client

    在网上找了一个python的scribe client使用方法 依赖的模块: pip install facebook-scribe pip install thrift 代码例子: #!/usr/b ...

  3. VS2017出现不存在从"CString"到"const char*"的适当转换函数

    出现不存在从CStrign到const char*的转换,可以将项目属性的字符集设置从"使用Unicode字符集“转换为”使用多字字符集“. 点击”项目“----“属性”----“配置属性” ...

  4. vs2013编译soui并创建一个项目

    1.soui.10.sln改为soui.13.sln 2.用nodepad++打开soui.13.sln,作如下修改 注:第一行我是改为13.00,编译后似乎自己变为12.00了 编译结果: 注:这是 ...

  5. ASP.NET CORE 基础知识(一):概述【上】

    此为系列文章,对MSDN ASP.NET Core 的官方文档进行系统学习与翻译.其中或许会添加本人对 ASP.NET Core 的浅显理解 原文请参考MSDN ASP.NET Core. 这篇文章是 ...

  6. 安卓之滚动视图ScrollView

    (1)垂直方向滚动时,layout_width要设置为match_parent,layout_height要设置为wrap_content (2)水平方向滚动时,layout_width要设置为wra ...

  7. IDEA 导出可执行jar包【转载】

    1,在项目上鼠标右键 --> Open Module Settings,或者[shift+ctrl+alt+s] 2, Artifacts --> + --> JAR --> ...

  8. centos7一步一步搭建docker tomcat 及重点讲解

    系统环境:centos7.7 (VMware中) image版本:tomcat:8-jdk8-openjdk (截止2020.01.10该系列版本) 安装步骤参考文章:https://www.jian ...

  9. uniGUI之UniPopupMenu和右键菜单(27)

    0]MainModule的BrowserOptions.boDisableMouseRightClick设置为Trure; 1]控件的OnCellContextClick的事件 procedure T ...

  10. /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found的解决办法

    #############################BEGIN############################# strings /usr/lib64/libstdc++.so.6.0. ...