C#基础:类的三大特性 之 多态

一、封装、继承、多态关系说明

封装、继承、多态这三大特性是相互关联的,封装和继承几乎都是为多态而准备的。

封装是基础,继承是关键,多态性是补充。

多态性存在于继承性之中,它是继承性的进一步扩展,没有继承就没有多态。

通过多态可以实现代码重用,减少代码量,提高代码的可扩展性和可维护性

二、什么是多态

多态是对同一个函数(功能)出现了不同种的实现方式

从类到抽象类,从抽象类到接口,这其实是人们对于多态功能的演变。

通过多态可以实现代码重用,减少代码量,提高代码的可扩展性和可维护性

三、两种多态

编译时的多态性(静态多态)(重载)

运行时的多态性(动态多态)(重写)

1、编译时的多态

编译时的多态性是通过重载来实现的。

对于非虚的成员来说,系统在编译时,根据传递的参数、返回的类型等信息决定实现何种操作

具有运行速度快的特点。

(1)方法重载:

可以在同一个范围内对相同的方法名有多个定义

方法的定义必须彼此不同,可以是参数列表中的参数类型不同,也可以是参数个数不同。

不能重载只有返回类型不同的方法声明

(2)运算符重载

比如数值计算的+=字符串+=委托事件的+=

(3)隐藏方法

通过new修饰符来实现对继承的方法重载

子类Dog类调用hello()时,在方法前添加new关键字,覆盖掉父类Animal类的hello函数,调用自身的hello()函数。

2、运行时的多态

C#中运行时的多态性是通过重写实现。

运行时的多态性是指直到系统运行时,才根据实际情况决定实现何种操作

具有高度灵活抽象的特点。

(1)虚函数
(2)抽象方法
(3)接口实现

四、类的继承关系来实现多态

1、虚函数(运行时多态)

父类虚函数virtual,子类override重写 。

在运行时父类指针可以指向任意一个子类的地址,选择不同的实现

2、抽象函数(运行时多态)

父类抽象函数abstract,子类实现。

父类抽象函数,只有函数声明部分;子类继承了父类,实现抽象函数

3、隐藏方法(也叫重载,编译时多态)

子类中用隐藏函数的方法重写

五、接口中多态的实现

c#中子类必须且只能继承一个父类,但我们又要同时重写两个属于不同类的成员函数,为了解决这个问题,人们开发出了 接口 这个技术。

1、多重继承

接口的特点是能够多重继承,每个接口中只能够写声明,实现接口中的成员完成多态的表示。

2、多个类继承同一个接口
3、接口和接口之间可以进行继承 
4、继承条件

使用接口实现多态 需要满足以下两个条件:

(1)定义接口并使用类实现了接口中的成员。

(2)创建接口的实例指向不同的实现类对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值