偶菜菜,学习面向对象也有快两个月了,然而对接口这个东西还是很是疑惑,尤其这几天研究ARCEngine,面对铺天盖地的“I××”都崩溃了,各位大大们救救我吧。小弟的疑问主要有如下两个方面第一个,以前听过一个java班的老师讲,接口是大家的通信协议,项目A的第一小组和第二小组通过接口把程序结合起来,项目就 搞定了。不明白的是大家都继承自这个接口,但是各自实现各自的方法,这样不是前言不搭后语吗,程序怎么能结合到一起呢?第二个,ARCEngine不知道有没有这个的朋友,是一个地信二次开发方面的kit,它给出了,大量的接口,每次用接口的时候都是"IAA a = new bbclass();"。不明白为什么要这么设计,直接给出类来,我就new各种对象不是更方便吗?而且,我总觉得这两个问题中的接口好像不是一个概念似的头大了,头大了!各位达人s,帮帮小弟的吧;

解决方案 »

  1.   

    A说我能给你一把斧子,而B正需要这样一把斧子去砍树,B只要知道A能给我斧子就可以了,至于它是怎么制造斧子的,B没有必要关心。这样A 只负责造斧子,B只负责拿斧子砍树。各干各的。只能说这么多了。
      

  2.   

    习惯就好,比如:List<String> list = new LinkedList<String>();这样的写法你能看明白不?
      

  3.   

    一般来说,声明对象时,等号左边的层次越高越好。理想状态是 Object list = new Xxxxx(); 但这基本上是不可能的。
      

  4.   

    换句话说 给你一个规范 具体怎么实现完全在你的发挥 
    比如你要用java操作数据库 那么你会怎么办?
    你肯定想有个类来调用对不对??
    可是这个类 我和你说 这个不是sun公司写 而是由数据库厂商来写的
    那么你一个类我一个类 类名参数 返回值可能都不同 那你怎么方便记忆和使用阿?
    于是sun只提出接口 规定了方法 这样你只需要调用接口就可以了 而不去关系数据库厂商怎么实现的了
    不知道这个能否理解
      

  5.   

    考虑一下usb接口。电脑上有很多usb接口,比如接口里只告诉我们两个方法,启动和停止设备(支持usb接口的设备),功能是如何实现的不需要在接口中实现。所有的外部设备例如,鼠标,键盘,mp3,u盘,它们来实现usb接口里的功能就行了。电脑类中可以实现一个插入的方法,此方法接受一个usb接口实例并调用其方法。这样电脑和其它外部设备通过接口连接起来了。
      

  6.   

    打个比方,你先编了一段代码,其中需要调用别人的代码(关键是这段代码还没写出来),可不知道别人的函数名,参数,返回值等等,怎么办?你就用接口规定一下别人的代码必须实现什么接口,以便你能够调用:
    你的代码
    interface A{
       public void doSomething();
    }
    class B{
       public void go(A a){
           a.doSomething();
       }
    }
    别人的代码(后写的) 
    class C implemengts A{
       public void doSomething(){
          System.out.println("ok");
       }
    }
    如果想要你的代码能够调用C的函数,最简单的方式就是new B().go(new C()),更常用的是反射机制
      

  7.   

    按照楼上各位的解释,其实用不着接口,如果只是多态,用继承即可。
    A是基类(不是抽象类也不是接口),B、C、D都继承A,
    A中定义好方法,B、C、D分别覆盖实现这些方法。
    然后 A = new B(); A = new C(); A = new D(); 搞定之。
    此时有人问了,那还要接口干嘛?
    接口的关键在于如果你继承了A(此时A变成接口),编译器就强制你必须实现接口中的方法,注意!是在编译期间就必须实现。接口把应该实现的方法用定义的方式体现,但本身并不实现它(因为你不知道具体运行环境是什么情况,也无法实现)这相当于制定了规范,实现类要实现它,就必须要全部重写里面的方法,以保证有人用接口操作时不会出问题。想想看,如果A仅仅是一个常规类,子类是可以不用实现所有方法的,而基类的方法实现很难保证运行期的正确性。所以这个“接口”就失去了规范性。不知道这样说明白了没有。其实,接口最重要的特性并不在此,因为抽象类完全可以替代接口,因为抽象类里如果不定义实现方法而全是抽象方法,其实就是接口。接口本身就是一个特殊的抽象类。sun当初设计接口,真正的目的是为了实现多继承,但是又不想象C++那样用常规类来实现多继承,因为他们觉得那样会使程序变得很复杂,不利于解耦。
    所以我个人的理解接口最终极的目标就是为了最大限度的、彻彻底底的解耦。
      

  8.   

    首先BS一下33%回帖率的人
    ===============================
    第一个,以前听过一个java班的老师讲,接口是大家的通信协议,项目A的第一小组和第二小组通过接口把程序结合起来,项目就 搞定了。不明白的是大家都继承自这个接口,但是各自实现各自的方法,这样不是前言不搭后语吗,程序怎么能结合到一起呢?-------------------------------比如国家规定了:平均电压是220V,频率是50Hz的正弦交流电,是我国家用电的标准。这是国家制订的规范,你可以认为它是接口发电厂有很多:风力、水力、火力、核电,但它们生产的电要想被家用电器所接受,就必须达到国家制订的这个标准。也就是说,电厂实现了接口。你、我、他、张三、李四...... 等等家里使用的电器,包括冰箱、洗衣机、电视机......,它们使用的都是国家规定的那种电源。也就是说,它们是接口的使用者
    在这个模型中,家用电器看到的是达到规范的电源,也就是说它们面向的是接口,它不必关心实现接口是哪种类型。
    电厂也只管生产规范的电力,也就是说它们只管实现接口的功能,也只管提供接口中规定的规范,而不必关心到底是谁会使用这个接口。这样一来,模块与模块之间的联系就没有那么紧密了,也就是我们说的降低了模块之间的耦合性。也即增强了灵活性。另外,如果你学过了 AWT 以及它们的事件处理方式,可以仔细地去思考一下AWT中的事件处理为什么要用接口。