zoukankan      html  css  js  c++  java
  • java 接口(翻译自Java Tutorials)

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

  • 相关阅读:
    UBUNTU开机时出现“waiting for network configuration” 问题的解决 (转) 沉沉_
    模拟地与数字地(转) 沉沉_
    转 parsing error:expected ")" 解决方法 沉沉_
    转 按Enter键或者ESC键,程序退出的解决方法 沉沉_
    C语言中的常量 沉沉_
    TI C64X DSP中断向量表的配置(硬件中断) 转自新浪博客 沉沉_
    只用串口和网络裸机开发ARM程序(OK6410开发板) 沉沉_
    ubuntu 上开启 网络文件系统(NFS) 沉沉_
    Visual Studio 2010 Express for Windows Phone 新建项目时为何不显示 XNA
    Win32汇编菜单进阶之右键弹出菜单
  • 原文地址:https://www.cnblogs.com/ggjucheng/p/2802086.html
Copyright © 2011-2022 走看看