C#------多态

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Yue510/article/details/82938996

多态
多态:同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。在运行时,可以通过指向基类的指针,来调用实现派生类中的方法。
多态的作用:把不同的子类都看作是父类,可以屏蔽到不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化。

在C#中多态的实现有虚方法、抽象类和接口等。

  1. 虚方法
    用virtual修饰的方法叫做虚方法,
    虚方法可以在子类中通过override关键字来重写,
    常见虚方法 Equal() ToString()

Public virtual void Student() //声明虚方法
Public overried void Student() //重写虚方法
子类的方法名可以和父类的方法名重名,但是会出现一条绿线,瑕疵。
解决方法:
方法一
可以在子类方法的修饰符后面加new就解决了,
无论是否加new,都不影响使用。
方法二-----虚方法
可以在父类的方法的修饰符前加 virtual(虚拟的)
在子类中重写父类的方法,在修饰符前加 override(重写,覆盖),调用父类的方法,但是把父类的方法进行重写了,更换了方法里面的内容。
虚方法与重写区别。
1,方法不能用static修饰(虚方法)
2,方法重写与基类的签名必须一致
3,virtual不能与private一起使用
重写(override)与重载(overload)的区别。
重载(overload)是方法的名称相同。参数或参数类型不同,进行多次重载以适应不同的需要。重载(overload)是面向过程的概念。
重写(override)是进行基类中函数的重写。重写(override)是面向对象的概念(子类重写父类方法,不管是虚方法还是抽象方法都可以)。
重写:不同对象对于同一个方法调用的不同行为(指不同对象收到相同信息时,会产生不同行为)。
在这里插入图片描述

  1. 抽象方法与抽象类
    抽象类与抽象方法由abstract修饰。
    abstract的使用注意:
    抽象方法没有方法体;
    抽象成员只能存在于抽象类中,
    抽象类可以有非抽象成员,
    抽象类的派生类必须实现抽象方法体,
    抽象类只能用作基类,无法实例化。

Public abstract void Student() //声明抽象方法
Public overried void Student() //重写抽象方法

什么时候用抽象方法?
这个方法里面没有抽象体,不需要对什么东西进行修饰或者叙述,其他类中又都有这个行为,就用这个抽象方法。

  1. 接口
    定义:interface关键字,接口中可以有属性,方法(未实现)
    接口的名称通常以“I”开头,如Ilist。
    如果一个类既继承了类又实现了接口,那么这个类必须写在前面。一个类只能继承一个父类,但可以实现多个接口。
    接口:一种规范,可以是一种能力。接口里的东西要去实现,不是继承。

C#中的接口和类的异同点?

  • 不同点
    不能更直接实例化接口。
    接口不包含方法的实现。
    接口可以多继承,类只能单继承。
    类定义可在不同的源文件之间进行拆分。
  • 相同点
    接口、类好和结构都可以从多个接口继承。
    接口类似于抽象基类:继承接口的任何非抽象类型都必须实现接口的所有成员。
    接口和可都可以包含事件、索引器、方法和属性。

C#支持多重继承吗?
类之间不支持,接口之间支持。类对接口叫实现,不叫继承。
类是爹,接口是能力,能有多个能力,但不能有多个爹。

猜你喜欢

转载自blog.csdn.net/Yue510/article/details/82938996