接口

  接口就是一个抽象类,只不过它里面只能声明抽象成员。微软认为接口就是一个规范,只说不做,那么就以为接口的成员必须由“子类”来实现,也就以为这接口中的成员必须是公共的和抽象的。
    
  使用父类实现多态,那么实现多态的子类对象需要同一族群,所以必定会有共同属性。如果只是有共同的行为,但是却不是同一族群的时候就可以考虑使用接口。如果你仅仅想实现规范的作用---接口
 
     构造函数是让子类来使用的,就说明你必须去实现先,但是接口中不能有任何成员的实现,所以不能有构造函数。
     实现接口的成员并不是来重写,实现之后的接口成员就是类的普通成员
     什么是接口对象:所谓的接口对象就是实现了接口的类的对象。
     如果一个类继承自另外一个类同时实现多个接口,那么类的继承需要先确定,也就说明:如果第一个是类,那么后面的都是接口,如果第一个是接口,那么后面的都是接口。
 
一、语法:
[访问修饰符] interface 接口名
{
    // 接口成员定义
}
接口只有方法、属性、索引和事件的声明。不能包含字段。
接口是用来实现的,所有成员默认为public abstract
接口的默认访问修饰符是internal
接口中的成员不能有任何的实现
接口中的成员不能写访问修饰符。
     
  接口是“多继承”
由于“多继承”,无法保证方法重名的问题
可以显式实现接口的成员
<接口名>.方法名(){   /* 方法体 */  }
显式实现的接口成员必须由接口对象来调用
 
二、使用接口的语法
一个类可以实现多个接口。
实现接口的类,必须把接口中的所有成员都实现。
子类实现接口中的成员时,不能修改成员的访问修饰符、参数列表、方法名等。(与方法重写一样)
 
三、接口的特点总结
1、接口是一种规范。为了多态。
2、接口不能被实例化(接口是特殊抽象类,抽象类中可能有抽象方法,实例化没有意义)。
3、接口中的成员不能加“访问修饰符”,接口中的成员访问修饰符为public,不能修改。(默认为public)
4、接口中的成员不能有任何实现(“光说不做”,只是定义了一组未实现的成员)。
5、接口中只能有方法、属性、索引器、事件,不能有“字段”。
6、接口与接口之间可以继承,并且可以多继承。
7、实现接口的子类必须实现该接口的全部成员。
8、一个类可以同时继承一个类并实现多个接口,如果一个子类同时继承了父类A,并实现了接口IA,那么语法上A必须写在IA的前面。class MyClass:A,IA{},因为类是单继承的。
9、当一个抽象类实现接口的时候,如果不想把接口中的成员实现,可以把该成员实现为abstract。
10、“显示实现接口”,只能通过接口变量来调用(因为显示实现接口后成员为private)。
 补充:

  1、接口本质就是一个抽象类,在接口里面就是声明一系列的属性,方法,索引器和事件。从反编译工具可以看到接口是抽象类---抽象的不能实例化,只能被实现;接口是一个类,说明它也是一种数据类型,可以通过接口创建出接口对象(所谓的接口对象其实是实现该接口的类的对象)

  2、创建一个接口对象,其实就是创建一个    实现了这个接口的类    的对象

  3、如果某个类没有实现某个接口,那么这个这个类的对象不能强制转换为接口类型。

  4、接口不要求实现接口的类有某种关联(只需要有共同的行为),也就是说不要求他们要父子继承关系,方便了用户的拓展。  父类---虚方法/抽象方法---子类重写---多态

  5、在公司里面,接口更多的认为是一种规范。

  6、使用接口的方式:

      6.1、声明接口类型的变量,存入 实现了接口的类的 对象

      6.2、以接口类型做为参数,传入 实现了接口的类的 对象

  7、显示调用接口:显示实现接口的方法需要接口类型的对象才能调用。因类它默认是私有的,而且还不能人为修改为public

      7.1、如果声明的类型就是接口类型,那么可直接调用

      7.2、如果声明的类型是实现了接口的类的类型,那么就需要做强制转换。

  8、接口解决了通过继承实现多态的三个问题:

      8.1、通过继承实现多态只能是单继承,但是接口可以多实现

      8.2、通过继承实现多态的类必能够提取出共同的父类,也就说明这些类之间需要有共同的特征和行为。但是接口只需要它们有共同的行为。

      8.3、通过实现了继承的类做为参数传递,会传递类的对象的所有属性和方法,但是通过接口做为参数,只能调用到接口中声明的方法和属性。---更加安全

posted @ 2015-09-16 23:37  Chen_Weifeng  阅读(150)  评论(0编辑  收藏  举报