接口?究竟有什么用呢? 在没有学习接口之前,总认为接口是很难学习的一个知识点;因为从名字上来理解就感觉非常的神秘!但这都是表面的现象,因为,有些事情表面虽然给人一种神秘的感觉,但实质却很简单;就好比接口,下面是我对接口的简单总结:
接口按照一定的协议组成,实现接口的类或者结构必须遵守其协定。接口可以从多个基接口继承,而类或结构可以实现多个接口;接口的定义方法:如 interface interfaceName{ };接口的成员只可以是:事件、属性、方法;除开这四种成员,别的都不可以;在定义接口的成员时,不能加任何修饰符;因为系统默认为公共(pulic),所以不需要加任何修饰符;相反就会报错。成员的定义;属性:定义属性时,只可以定义该属性的只读,或者读写、只写等操作;并且在定义操作的时候只能以分号( ; );例如:string Nam{ set; get; ///该属性定义的操作为读写;即不仅可以写入,并且还可以进行读出操作; };方法的定义:定义方法没有方法体,在括号后面以分号结束,方法体的实现在实现类中实现。例如:string Opear();这就表示定义一个方法。
接口的操作规则,接口不可以进行实例化,但可以对其进行定义变量;并且接口只可以作为基类存在;在接口中定义的成员在实现类或者结构中必须将所有的成员实现,否则就会保存;接口同时也是一种继承的方式之一(还有类之间的继承,一对一的继承。),并且是一种多继承方式;接口成员的现实实现方式:如果,在一个实现类或者结构中有多个接口,并且在这些不同的接口中有相同的成员,那么就必须进行显示的实现;否则就要报错;例如:接口一:interface A{ float length(); float width(); } interface B{ float length(); float width(); } 此时,如果要对这两个接口进行同时实现,那么就要进行显示实现;如; class Box:A,B{ pulic float length{ return "方式一"; } pulic float width(){ return "方式一二"; } float B.length(){ return "实现2"; } float B.windth(){ return "实现22"; } };现在问题出来了,两个接口中的成员都是一样的,因此在类或结构中实现的时候,必须要将另外一个进行显示实现;否则就要报错;接口的实现不能本身进行实现,必须要用类或结构来进行实现。
接口和抽象类的比较;抽象类同接口一样,都只可以作为基类使用;抽象类中的成员不一定是抽象类型;但如果在类中只要有一个属于抽象类型,那么这个类就必须将其定义为抽象类;否则就要报错。接口只是一种定义,实现则全是在类或者结构中,并且要全部实现,否则就要报错;在抽象类中,抽象成员默认为可以进行重写操作;因为,abstract实际包含virtual功能(虚拟操作)。因此,在派生类中可以对该成员进行重写操作;而接口中的成员则不可以,接口相当于是一种协议,那么继承类就必须要遵循该协议的规定,只能实现规定的协议操作,而不可以进行别的什么操作。接口可以进行多对一实现,即在一个类或结构中可以同时有多个接口进行实现;而在抽象类中,只可以有一个抽象类作为基类。
接口与抽象类的缺陷,接口虽然比抽象类更安全,但是,在进行实现的时候只能按照规定的协议进行;同时,这两种操作只可以作为一个类或结构的基类(有点不准确)进行实现。