我们学习OOP的时候会接触到“接口”这个概念,这里我们不谈接口的实现和他的优点什么的.主要是想弄明白一个问题,一些API提供的接口是怎么实现调用的?首先我们来看一个简单的例子:我们写程序的时候都有一个入口(C语言为main()函数,java相同),我们可不可以简单的认为这也算是一种接口(这里只是简单的做个比喻).main()函数是一个接口,我们要做的只是实现这个接口.既然我们想到这里,我们可以这样想API或者别的是不是跟这个是同一个原理?我们在GUI编程中会接触到事件驱动那些东西(一直让我头疼),幸好有编译工具帮我解决了.现在自己分析下,就拿SERVLET来说,SERVLET都得实现DOGET()或者DOPOST()方法,暂时当作他们是接口中的一个抽象方法.客户端访问服务器的时候他们会被调用,谁调用他们呢,大家都知道.当然是SERVLET容器调用他们了.说到这里我们的注意力再放回去.程序的开始是由系统,或者别的什么调用MAIN方法的
SERVLET的开始是由SERVLET容器调用里边方法的
....................可能还有很多类似(当然多了,世界之大,无奇不有)我们这里就能想到一点,接口只是一个让我们来完成工作的工作地点.系统或者说是驱动等已经规划好了他们初始化运行的方法,我们通过继承等方式重写了那些方法,但是父类的引用是可以调用子类的实例的.我们想办法告诉那些父类我们现在要调用哪个子类的对象(父类会傻忽忽的去调用,当然,我们也是傻冒一般的给那个所谓接口的方法的实现里边写一些鸟文,现在还有中文^_^),然后父类就会调用我们给他说的子类那些规定的方法(这接口,也就接上了.)跟消防栓一样,他就提供了个出水的接口,然后我们拿着水管(给他指定要用那个东东实现),然后我们把水管接上去那就实现了(呵呵,比喻好像有点离谱).......接了半天把自己都弄晕了,回神想下.....................我们的程序也许就是这样吧(那些什么API可能也一样),然后他们会调用我们重写的那些方法,我们也就实现了程序运行的目的.程序是怎样知道我们要让他们去调用那个子类里那个规定的方法呢?文件都有文件名,我们要打开那个文件,必须将那个文件告知可以打开他的程序(通过鼠标点激或者拖放等方式告知),编程也差不多吧.我们在生成文件的时候就把一些自己的信息放进去了,然后在执行的时候那个打开他的程序直接找事先约定好的地方,也就是我们实现的那个接口.这样就完成了告知任务.还有一种可能就是配置信息,我们配置一些信息的时候,其实也是在告知程序要去调用哪个子类.郁闷了...................这样说的话,我们其实整天都在实现一个同样的接口了.............不知道这样分析是否正确.欢迎大家一起来探讨!!!!!!!!!!!!!!!!!!!!!!!!1

解决方案 »

  1.   

    一、我们写程序的时候都有一个入口(C语言为main()函数,java相同),我们可不可以简单的认为这也算是一种接口(这里只是简单的做个比喻)
    -------------------------------
    Main()函数不是接口,是程序的入口。(这里我觉得你搞混了“接口”和“程序入口”的关系)
    二、程序是怎样知道我们要让他们去调用那个子类里那个规定的方法呢?
    --------------------------------
    在没用框架下的Java里,只能写implements  ***接口  的方法来显式地告诉编绎器我这个类是实现了哪个接口的哪些子函数,属性等,至于你问怎么找到这些类,那就去问编绎器吧,问问它是怎么工作的,这个没学过,有待以后研究。
    但用了框架的情况下,可以通过其它的方式来告知编绎器类与类的关系,但原理是一样的。
      

  2.   

    接口就是用来协调对象间关系的(亦即“对接”)。比如,人和计算机之间不能直接通信,你不能直接去操作cpu和内存,于是就有了键盘,鼠标,监视器等这些接口。
    JAVA程序和数据库不能直接通信,于是就有了JDBC这组接口。
    员工和公司管理制度不能直接通信,于是就有了人事部门这个接口。可以看出,接口都有其实现者、调用者和制定者。制定者有时是实现者,有时是调用者,而有时是两者共同制定,或第三方制定。比如,人是计算机接口的调用者,计算机制造商是实现者,而制定则是两者在长期实践中协调完成的。
    程序员是JDBC接口的调用者,数据库开发商是实现者,制定者则是SUN的JAVA开发团队。
    员工是人事部门的调用者,人事管理人员是实现者,这里的制定者可能就是实现者,也可能是更高级的管理人员,但一般不可能是调用者,即员工,呵呵。main()方法可以看成是程序员和JVM之间的接口,这个接口由SUN制定,程序员实现,JVM调用。
    servlet接口也是由SUN制定,程序员实现,服务器框架调用。理解接口宜从宏观上去理解,抛开JAVA,类等等这些具体概念,接口其实是一个再自然不过的想法。实现者和调用者之间有时不能直接通信,有时很难直接通信,有时则是调用者过于繁杂(如程序员五花八门),或实现者过于繁杂(如硬件制造商名目繁多),这些情况都要求出现一个中间协调者,这个东西就是接口。
      

  3.   

    补充一下Dan1980的观点:JDBC、Servlet等规范并不是由Sun规定的,而是由JCP组织制定的。
      

  4.   

    胡扯...
    你们看来没明白我的意思,我说main()那些都是做个比喻
    ,这里我们不谈接口的实现和他的优点什么的.
    -------------------------------------
    上边我说了,不从那些方面说,只从另一个个人感觉方面说