JAVASE官方教程:接口之概述(1)
当一个软件有多个共同的开发者一起完成时,他们需要制定一个"契约"规定他们的软件是怎么交互的.每一个组不需要知道其他组的代码是怎么编写的.通常,接口就是这种"契约".
例如,想象一下我们的未来社会,汽车不需要人为操作,只需用计算机控制就可以把乘客从一个地方送到另一个地方.汽车制造厂编写软件用来控制汽车启动,停止,加速,向左走等等.其他厂商比如电子导航仪厂商,让计算机系统接受GPS位置数据,无线传输交通状况并使用这些信息来开车.
这个汽车厂商必须公布一个工业标准接口用来讲清楚什么方法可以被调用让汽车移动.导航仪厂商就能通过调用这些接口里的方法来编写软件达到控制汽车目的.两个厂商都不需要知道对方是如何实现他们自己软件的.
java中的接口
在java语言中,一个接口(interface)是一个引用类型,就像一个类,但是只能包含常量,方法签名,nested types没有方法体.接口不能不实例化-只能被某个类实现或者是被其他的接口所继承.
定义一个接口就好像创建一个新的类:
public interface OperateCar { // 常量声明 // 方法签名 int turn(Direction direction, // An enum with values RIGHT, LEFT double radius, double startSpeed, double endSpeed); int changeLanes(Direction direction, double startSpeed, double endSpeed); int signalTurn(Direction direction, boolean signalOn); int getRadarFront(double distanceToCar, double speedOfCar); int getRadarRear(double distanceToCar, double speedOfCar); ...... // more method signatures }
注意:方法签名没有花括号,是以分号结尾的.
为了使用接口,你需要写一个类实现(implements)这个接口.当这个类提供了在接口所有的方法后,这个类就可以被实例化.
public class OperateBMW760i implements OperateCar { // 操纵汽车的方法的实现 -- // 例如: int signalTurn(Direction direction, boolean signalOn) { //打转弯灯 //关闭转弯灯 } // 其他实现 }
在以上的自动汽车的例子中,汽车厂商将会实现这个接口.当然雪佛兰的实现跟丰田公司的实现是不一样的,但是他们都坚持相同的接口.导航仪制造商就是这个接口的使用者,导航系统将会调用接口中的方法:转弯,刹车,加速等等.
接口APIs
自动汽车的例子像我们展示了接口作为工业标准API的用法.在商业软件中产品中也是相同的.典型的,某个公司销售一个软件包给另外一个想要把这个软件包用在自己的软件中的公司,这个软件包中包含了很多方法.比如有一个数字图像处理的软件包卖给一个做面向最终用户图像程序的公司.这个图像处理公司公布给他的客户一个接口,并且自己写了一系列的类来实现这个接口.这个面向最终用户的公司使用接口中定义的方法.这个图像处理公司的实现方法是保密的.
接口和多继承
在java中接口还扮演了一个非常重要的角色.尽管接口跟类联合起来工作,但是接口不属于类层次体系.java语言不允许多继承,但是接口提供了一种变通的方法.
在java中,一个类只能继承"一"个类而可以实现多个接口,所以对象可以有多种类型:他们本身的类型和所有他们实现的接口类型.这意味着,如果一个变量被声明为一个接口类型,他就可以引用任意实现了此接口的类的实例.
上一篇: Java函数式编程(四)集合的使用
下一篇: Java函数式编程(一)