先问一个问题,为什么需要接口?
看例子:
需求:要求实现防盗门的功能。门有“开”和“关”的功能,所有“上锁”和“开锁”的功能。
分析:首先防盗门是一扇门,它有一把锁。按照面向对象的思想,可以将门分别定义成抽象类。但是,不能让防盗门在继承门的同时又继承锁。原因有两点:1、防盗门不是锁,不符合 is a的关系;2、Java只支持单继承。那么如何解决这个问题呢?这时就要用到接口,可以将锁定义为接口,让防盗门继承门,实现锁的接口。
那么什么是接口?它的特点又是什么?我们一步一步学习
在生活中,接口是一套规范,满足这个规范的设备,就可以将它们组合到一起,从而实现该设备的功能。现在以USB接口为例,来学习接口的含义。USB接口实际上是某些企业和组织等制定的一种约定或标准,规定了接口的大小、形状、各引脚信号的范围和含义、通信速度、通信流程等,并按照该约定或标准来设计各种设备,如U盘、USB风扇、USB键盘都可以插到USB口上正常工作。
在软件中,接口同样是一种规范和标准,它们可以约束类的行为,是一些方法特征的集合,但是没有方法的实现。从这个角度来讲,接口可以看作是一种特殊的“抽象类”,但是采用与抽象类完全不同的语法来表示,两者的设计理念也是不同的,抽象类利于代码复用,接口利于代码的扩展和维护。
接口语法:
//定义接口的语法:
[修饰符] interface 接口名 extends 父接口1、父接口2,……{
//常量定义
//方法定义
}
//接口同样可以继承接口
//类实现接口的语法:
class 类名 extends 父类名 inplements 接口1,接口2……{
//类成员
}
//一个类可以继承多个接口
接口的特点:
1、 接口的命名规则与类相同。如果修饰符是public,则该接口在整个项目中可见,如果省略修饰符,则该接口只在当前包可见。
2、接口中可以东一常量,不能定义变量。接口中的属性都会自动用public static final 修饰,即接口中的属性都是全局静态常量。接口中的常量必须在定义时指定初始值。
//示例
public static final int PI = 3.14;
int PI = 3.14;//在接口中,这两个定义语句效果完全相同
int PI;//错误!在接口中必须指定初始值,在类中会有默认值
3、接口中