前言
本章我们将来讲解“面向对象”编程的第三个特征:多态之接口
制作不易还请各位一键三连哦!
接口概述
随着软件的规模,复杂度及版本数量的不断增长,软件对象之间的交互越来越困难,软件接口技术也越来越为人们所重视,目前已成为面向对象技术的一个重要组成部分
接口的定义和使用
接口的定义
接口是一个比抽象类更为“抽象”的一种数据类型,它所描述的是功能契约,即“能够提供什么服务”,而不考虑与实现有关的任何因素。
在c#中 接口的关键字是“interface”,其成员只能是一般方法,属性,和索引函数 而不能有字段和构造函数
例如:
单靠定义一个接口 我们会感觉这跟抽象类没什么区别啊 只是修饰的关键词不一样 那么我们现在来谈论下接口和抽象类究竟有何不同
接口和抽象类
- 接口和抽象类都不能创建实例
- 接口方法和抽象方法一样没有方法体
- 接口方法的访问修饰符是public
- 从某种意义上说,可以把接口看成是只包含抽象方法的抽象类,其中每个接口方法都表示一项“服务契约”
接口之间的继承
接口之间也是可以继承的
例如:“可存取”接口IDepositDraw就是从IDrawable派生类而来,因此它继承了IDrawable的Draw方法:
子接口可以包含与父接口相同的方法,但此时子接口的方法可以使用关键字new来隐藏父接口的方法,而不能使用override修饰符来重载父接口的方法
接口继承的传递性
接口之间的继承同样存在传递性
例如:接口IB从接口IA类派生,而接口IC又从接口IB派生,那么接口IC也就简洁的从IA派生。不过接口不可以直接从类去派生 直接从接口派生:
接口的实现
类对接口的支持声明和类的继承声明相似,有时也称为类从接口继承,这种继承关系同样存在传递性:如果一个类声明支持某个接口,那么它的所有的派生类也自动继承该接口
隐式实现
通过公有成员方法来实现所支持的接口方法,这叫做对接口方法的隐式实现
隐式实现的调用
隐式实现可以通过类的实例来进行方法的调用,也可以隐式转换为接口在进行方法的调用
显式实现
方法名之前加上接口名,这就叫对接口方法的显式实现
显式实现的调用
显式方法不能使用任何的修饰符,那么它实际上就是类的私有成员,因此不能通过类的实例来访问,而是需要转换为接口实例访问
接口的多态
显式实现是对接口的方法的真正实现,而隐式实现的方法可以看作是对原接口方法的覆盖
例如:
显式实现的注意事项
显式实现明确的指出了所实现的方法来自于哪一个接口,因此方法前的接口名必须是定义方法的原始接口
public interface ITest1
{
void Fun1();
}
public interface ITest2:ITest1
{
void Fun2();
}
public class ClassTest:ITest2
{
void ITest1.Fun1()//不能写成ITest2.Fun1()
{
}
void ITest2.Fun2()
{
}
}
接口与多态总结
在显式实现与隐式实现同时存在的情况下
- 通过接口类型的变量名,调用的是显式实现的方法
- 通过对象实例,调用的是隐式实现的方法
引入接口后,能够在程序中实现比类的继承更为丰富的多态性
总结
以上就是对接口的简单介绍 面向对象编程的道理很深 同学们一开始不用不求甚解 慢慢做的项目多了写的代码多了自然而然就会明白了
下期讲解:静态类型