不是很明白,请哪位帮助给出一个权威的答案.

解决方案 »

  1.   

    如果可以不实现接口中的所有方法,那就失去了接口的意义了。
    比如实现接口Car的对象都可以run(), 你就必须要提供run()方法。你要是不提供,那就不是Car接口的实现了
      

  2.   

    我也不太明白,为什么银行的保险柜TMD要锁着呢,为什么不让我进去拿点出来呢.
      

  3.   

    to jihanzhong
       如果可以不实现接口中的所有方法,那就失去了接口的意义了。
    --------------------
    接口的意义在于它的高度抽度,可以让代码更好的得到重用性.可是这种回答似乎又与我的问题不相符.
    烦请各位gs解答.
      

  4.   

    如果在设计语言的时候(不管是java的接口、抽象类,或者是c++的虚机类),
    如果可以只实现接口中的部份方法,这样在用户在使用时候的灵活性不是更大。
    同样也是可以实现多态的机制的。
      

  5.   

    而具体类是一定要实现的。因为作为一个具体类X,它既然声称实现了接口I,那就是说在所有需要一个I类型的引用的时候,我们都可以放一个X类型的对象上去(原因就是X声称它已经实现了接口A),比如:
    I i = new X();
    但假如I接口有一个方法f(),X类并没有提供它的实现,那么,对于上面这个i,如果要调用:
    i.f();
    的话,会出现什么问题呢?说了半天,感觉越说越不对劲,好像自己是在用定理来证明公理。楼主应该是钻牛角尖了。
    通常一种语言的语法是根据它想要实现的目的来制定的,上面的之所有有问题,就是因为JAVA既然要支持面向接口编程,必须这样规定语法。否则,如果我们写程序的时候,每次从接口上调用一个方法的时候,还要先检测一下:
    if(i.IsImplemented(i.f))
    那就像前面某位朋友说的,要接口还有啥用啊?直接从Object上进行检测不就得了?总归所有的类都从Object继承来的。
    而且如果检测失败了怎么办?抛出异常?何必呢?——自己写一们半垃子类,就是为了让别人抛异常。
      

  6.   

    //如果可以只实现接口中的部份方法,这样在用户在使用时候的灵活性不是更大。
    //同样也是可以实现多态的机制的。——如果你经常发现某个类只需要实现某个接口中的一小部分方法就可以很有用了,那说明那个接口的设计有问题了,它太大了,它应该分成多个接口的。
    ——看看JAVA标准库中的接口,大多数只有一个方法,不超过3个的差不多占到90了,没仔细数过,感觉上的。
      

  7.   

    to  steedhorse(晨星) 上面的问题引出来运行时和编译时检查的问题。
    我想jvm现在已经可以检测出这样的问题了。
    如果实现我说的只继承接口的一部份,而在用户调用的时候给出提示是没有任何问题的吧。
    如果这样的实现,是否给我们的程序给出了更大的活灵性呢?
    因为有的时候我们只是想用接口一部份方法,而不是全部。
    也许有人说这是我们的设计不好导致的,可我想说,哪一个程序没有这样的问题呢?
      

  8.   

    呵呵
    我还没写完,steedhorse(晨星) 就已经说我们的设计有问题了。可除了jdk外,其它所有的程序或多或少的都会有一点这样的问题存在的吧。
      

  9.   

    这是JAVA的规定呀??
    有谁说的清楚呢??
      

  10.   

    //也许有人说这是我们的设计不好导致的,可我想说,哪一个程序没有这样的问题呢?
    ——那肯定是要克服,我觉得。//上面的问题引出来运行时和编译时检查的问题。
    //我想jvm现在已经可以检测出这样的问题了。
    //如果实现我说的只继承接口的一部份,而在用户调用的时候给出提示是没有任何问题的吧。
    //如果这样的实现,是否给我们的程序给出了更大的活灵性呢?
    //因为有的时候我们只是想用接口一部份方法,而不是全部。
    这个当然不能只依赖编译时检查,那样的话,软件开发将会变成一个噩梦。
    你不能只考虑只有一个人,一家公司在写代码。有时候多个项目组需要合作,而且还可能用到N多其它公司的库,而且别的公司在开发它们的库的时候,咱们的公司可能还没成立,而且它们可能别有项目组,别有公司还可能定期升级它们的库。比如说A公司写了一个库,支持一种回调机制,你只要写一个实现了接口I的类X传给它,它就可以调用接口上的方法来完成一些功能,假如B公司在A公司发布了这套库之后才成立,现在B公司想用这套库里的功能,但它并不想实现接口I的全部接口,那这怎么办?让A公司再改个新版本出来?再举个更具体的例子,java.sql.DriverManager类有一个静态方法,它返回一个接口类型:Connection,这里的Connection的实现类肯定是别人写的,而且源代码不会公开出来,那么我们编程时,写到这里了:
    Connection conn = DriverManager.getConnection(……);
    下一步怎么办?——我现在还不知道Connection接口上的哪些方法被实现了,哪些方法没被实现,后面的的程序我怎么写啊?
    或者我百般调试,小心翼翼的,终于有一天,我通过各种方法测出了所有已被实现的和未被实现的方法,于是,我忍辱负重,而且由于我水平高,仅仅用那些已经实现了的方法竟然也完成了任务
    然后,有一天,那个做数据库的公司说它们的java驱动要升级了,这一次,它们决定去掉a,b方法的实现,而增添原来没有的实现的c,d,e方法的实现——555,我TM容易嘛我。。
      

  11.   

    如果一个方法应该有默认实现,那么显然它应该做成基类或抽象基类,而不是,或者不仅仅是做成接口。一具方法有默认实现,哪怕它是空的,那也跟不实现是完全两种含义。就拿java.awt.event包里的两个类来说,WindowListener接口声明了各种事件,而有时候你不一定想处理所有这些事件,于是你可以从WindowAdapter继承,而不是实现WindowListener方法,为什么,因为WindowAdapter实现了WindowListener中的所有方法(空函数,表示啥也不做),你只需要覆盖你想处理的方法,比如你只想处理窗口关闭,而不想处理窗口最小化方法,那么你就让windowIconified方法保持从父类继承来的空白函数体好了。
    这样就表示:“窗口最小化时,我的程序啥也不做”,而不是“窗口最小化时,我的程序发生未实现异场”——而后者也就等价于说:“我做梦也没想到窗口竟然还会被最小化。”至于刚才楼主说“可除了jdk外,其它所有的程序或多或少的都会有一点这样的问题存在的吧。”,那大言不惭的说,我写的接口就从来没有这种问题。因为一旦发现有太多这样的需求,我会把它做成基类或抽象基类,而不是接口。
      

  12.   

    我倒觉得interface最大的好处就是编译器保证它的所有方法都会被实现,否则编译就过不了。
    这样在使用别人写的类时就不用提心吊胆,也不用不停地去翻文档,手册,它就是升级了我也不怕。除非它不再支持那个接口了——那样的话,我就发誓再不使用他们写的库了。
      

  13.   

    深圳java程序员博客,为你提供多方面资料http://drivemewild.blogchina.com
      

  14.   

    接口和抽象类的理解 http://www.cnblogs.com/shengshuai/archive/2006/08/31/InterfaceAndAbstract.html
      

  15.   

    因为接口可以理解为一个抽象类(当然还是有很多区别的)
    里面的方法默认都只能是public abstract的抽象方法
    要是不实现它的所有方法  那么这个实现它的类也成为一个抽象类啦 就不能创建对象了
      

  16.   

    MARK,晨星这里是一个星。
    在C++版是晨星星星。
      

  17.   

    to steedhorse   我明白你说的意思.我曾经也是像楼上各位一样这样的一种理解方式.可我总是觉得这样有太牵强了.不能完全的让自己信服.所以请教此问题.谢谢大家.
    可能是有点专牛角尖了.
    ps: 晚上结帐.
      

  18.   

    接口就是规定具体动作的实现
    不如 不同的 人有不同的打领带的方法 ,所以要在实现的时候把具体的方法写出来 不过也有可能 interface里的方法太多了 
    有些不需要实现,可以用适配器模式
      

  19.   

    rikee19810706() ( ) 信誉:100    Blog  2006-09-05 10:58:00  得分: 0  
     
    借个地方,请教:用接口实现vc中的多重继承如何实现??==================
    ——只能适当模拟,无法完全实现。
      

  20.   

    alex9521(断--言) ( ) 信誉:100    Blog  2006-09-05 11:03:00  得分: 0  
     
    ……
    他用来约束你的行为。如果你实现他而不遵守他的规范那你实现的就是不是他这个接口!==================
    同意,楼主还是没有理解什么是接口,当然也就无法想通为什么具体类就要全部实现接口的函数。要么就是“默认空实现”跟“完全不实现”两个概念没搞清。
      

  21.   

    JAVA通过内部类和代理方法也可以再“模拟”一点多继承——模拟那种同时访问多个类的protected方法的效果。
      

  22.   

    @^@ --
    去找本<core java> 看看
    里面有详细的解释
      

  23.   

    本来想说上一大堆来回答楼主的问题的,但楼主也不是初学者,说那些没意思。我只想说一句:JAVA是比C++设计得更严格的语言,你如果要问为什么,就去问SUN吧。
      

  24.   

    再补一句:如果你认为语言需要改进可以给SUN写信,并说服他们采纳你的意见。哈哈
      

  25.   

    这个问题能讨论出这么多内容,实在太出乎我的想象了。如果楼主问“实现接口,为什么一定要实现接口中的所有方法”,那么,我的第一个回答是:这是 Java 语言的要求,不这样做就编译不过去。如果楼主再问“Java 语言为什么要这么要求”,那么,我的第二个回答是:这样的要求有好处,不这样要求有很多坏处。如果楼主再问“这样要求有什么好处,不这样要求有什么坏处”,那么,……,我已经不知道该怎么回答了,因为前面 steedhorse(晨星) 老兄的回答已经详尽、生动、精辟到无以复加的程度了!  ^_^
      

  26.   

    接口中只是方法的定义,并没有实现,如果接口中的方法不被实现,那这个方法在类中就没有,而Java中可以有接口类的引用。这样就可能出现有的方法无法引用,而产生异常。