接口(interface)是面向对象编程语言中定义操作规范的抽象类型,用于声明方法、属性和事件等成员签名,要求实现类必须包含指定成员且不可直接实例化。其通过封装成员集合形成抽象模板,支持从基接口继承,成员实现由类或结构体完成。Java接口通过implements关键字实现,默认成员变量为静态常量,方法均为抽象方法(Java 8后允许使用default修饰非抽象方法),支持多继承并解决单继承限制。Visual Basic接口使用Interface和End Interface声明,可包含Event、Sub、Function等语句,实现类需通过Implements语句指定接口并保持参数与返回类型匹配。
关键字
接口定义
接口是一种约束形式,其中只包括成员定义,不包含成员实现的内容。
声明格式如下:
[attributes] [modifiers] interface identifier [: base-list] {interface-
body} {;}
使用说明
1、attributes(可选):附加的定义性信息。
2、modifiers(可选): 允许使用的修饰符有 new 和四个访问修饰符。分别是:new、public、protected、internal、 private。在一个接口定义中同一修饰符不允许出现多次,new 修饰符只能出现 在嵌套接口中,表示覆盖了继承而来的同名成员。The public, protected, internal, and private 修饰符定义了对接口的
访问权限。
4、identifier:接口名称。
5、base-list(可选):包含一个或多个显式基接口的列表,接口间由逗号分隔。
6、interface-body:对接口成员的定义。
7、接口可以是
命名空间或类的成员,并且可以包含下列成员的签名: 方法、属性、索引器 。
接口这个概念在C#和Java中非常相似。接口的关键词是interface,一个接口可以扩展一个或者多个其他接口。按照惯例,接口的名字以
大写字母接口
同一计算机不同功能层之间的通信规则称为接口。
对协定进行定义的
引用类型。其他类型实现接口,以保证它们支持某些操作。接口指定必须由类提供的成员或实现它的其他接口。与类相似,接口可以包含方法、属性、索引器和事件作为成员。
接口中可以声明属性、方法、事件和类型(Structure),(但不能声明变量),但是并不能设置这些成员的具体值,也就是说,只能定义,不能给它里面定义的东西赋值。
Java接口
l 【定义】
Java中,能够完成特定功能的,由若干属性和方法组织成的,相对独立的属性和方法的集合。
l 【用途】实现类的
多继承,以解决Java只能
单继承,不支持多继承的问题。
l 【特点】
用关键字interface定义接口,通过关键字
implements来实现接口;
接口中的
成员变量具有公共性(public)、静态性(static)和最终性(final)。所以
修饰符只能是public,因此只能定义常量
实现多接口的类必须符合3个原则:能为所有的接口提供实现的功能,
能遵循重写的所有规则,
接口的”继承”与类之间的继承不同,”继承”该接口的类,需要”自力更生”,去实现接口中的
抽象方法,因此接口也相当于一个特殊的
抽象类。
接口相当于程序开发的一组协议,需要此功能的类均可”继承”该方法和集合。
接口中的属性都是静态常量,方法都是抽象方法(即没有给出方法具体定义),一个类实现接口后,将继承接口中的所有静态常量。
实现接口中的抽象方法时,方法头必须与接口定义中的方法头完全相同(包括
访问控制修饰符、
返回值类型、
参数列表等)(例外:可去掉关键abstract、接口定义时public可缺省,但是实现时不可缺)
l 【范例】
定义接口格式:
[public]interface 接口名称 [extends父接口名列表]
{
//静态常量
[public] [static] [final] 数据类型变量名=常量值;
//抽象方法
[public] [abstract] [native] 返回
值类型方法名(参数列表);
}
实现接口格式:
[修饰符] class 类名[extends 父类名] [implements 接口A,接口B,···]
{
类成员变量和成员方法;
为接口A中的所有方法编写方法体,实现接口A;
为接口B中的所有方法编写方法体,实现接口B;
}
实例:
本例定义接口AreaInterface,其中有静态常量pai和求面积的抽象方法area()。类Circle和类Rectangle实现了AreaInterface接口,即为接口中的抽象方法area()编写了满足各自要求的方法体,分别求圆形和
长方形的面积。
程序:AreaInterface.java
程序:Circle.java
程序:Rectangle.java