简单,可复制

点点滴滴,尽在文中

  :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

原文出自 http://www.cnblogs.com/ggjucheng/archive/2012/12/04/2802086.html

英文出自 http://docs.oracle.com/javase/tutorial/java/IandI/createinterface.html

软件工程的许多情况是,不同群组的程序员同意一个说明他们的软件如何交互的”合约”。每个组都应该能够在写自己的代码时,不需要了解其他组的代码如何写。通常说,接口就是这个合约。

例如,想像未来的社会中,电脑控制的机械机车,无需人工操作,通过城市街道运输乘客。汽车制造商编写软件(Java,当然),经营的汽车停止,启动,加速,左转,等等。另一工业组,电子制导工具制造商,使计算机系统接收GPS(全球定位系统)定位数据和无线传输的交通条件,并利用这些信息来驱动汽车。

汽车制造商必须发布行业标准接口,详细阐述了有什么方法可以调用使车移动(任何车,任何制造商)。指导制造商可以编写软件调用接口中描述的方法,驱动汽车。无论是哪个工业组都不需要指导其他组的软件实现。事实上,每个组只需要考虑,他的软件高度专有,只要继续坚持发布的接口,任何时候都保留修改的权限。

 

java接口

java程序语言,接口是一个引用类型,类似类,但是接口只能包含常量,方法签名,嵌套类型。方法没有方法体。接口不能被实例化—它只能由别其他类实现或者由其他接口继承。继承迟点讨论。

接口的声明,类似创建一个新的类:

public interface OperateCar {

   // constant declarations, if any

   // method signatures
   
   // An enum with values RIGHT, LEFT
   int turn(Direction direction,
            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
}

 

注意方法签名没有大括号,并以分号(;)结尾。

使用接口,必须写一个类实现接口。当一个可以实例化的类实现接口,它必须为接口声明的每个方法提供方法体。例如

public class OperateBMW760i implements OperateCar {

    // the OperateCar method signatures, with implementation --
    // for example:
    int signalTurn(Direction direction, boolean signalOn) {
       // code to turn BMW's LEFT turn indicator lights on
       // code to turn BMW's LEFT turn indicator lights off
       // code to turn BMW's RIGHT turn indicator lights on
       // code to turn BMW's RIGHT turn indicator lights off
    }

    // other members, as needed -- for example, helper classes not 
    // visible to clients of the interface
}

在上面的机器人例子,汽车制造商实现接口。Chevrolet的实现显然不同于Toyota,但是两个制造商都会遵循一样的接口。指导制造商是接口的客户,构建一个使用汽车位置的GPS数据,数字街道地图,交通数据驱动汽车的系统。做上述事情,指导系统将会调用接口方法:turn, change lanes, brake, accelerate等等。

 

API作为接口

机器人汽车例子演示了工业标准应用程序编程接口(API)的使用。API是常见的商业软件产品。一个公司卖软件包会包含典型的复杂的方法,其他公司会在他们自己的软件包使用它们,这个是很典型的。一个例子是,数字图像处理方法打包卖给做终端用户图形程序的公司。图像处理公司写自己的类实现接口,发布给它的客户。图形公司通过接口的签名和返回值调用图像处理方法。当图像处理公司的API是public(对于它的客户),它的API实现是接近严格保密的--事实上,它可以修改实现,一直到它继续实现客户依赖的接口。

 

接口和多继承

接口在java编程语言中,有很重要的另一个角色。接口不是类层次的一部分,尽管可以和类联合工作。java编程语言不允许多继承,但是接口提供一个替代方案。

java中,类只能继承一个类,但是它可以实现多个接口。所以,对象可以有多种类型:类本身的类型和实现的接口的所有类型。这意味着如果变量声明为该接口的类型,它的值也可以引用任何实现了该接口的类的实例化的对象。

posted on 2012-12-04 21:34  ggjucheng  阅读(1246)  评论(0编辑  收藏  举报