使用interface的一个显而易见的好处是无论子类怎样扩展, 都可以以一种统一的方法来调用.
换句话说先定义一个接口, 可以定义任意多个此接口的实现, 然后只需对接口进行调用.
除了这个好处之外, 接口还有其他的好处吗? 
也就是说, 定义了一个接口但仅仅实现了一次的方式是不必要的(假定这个接口永远不会再被其他类实现, 这个接口仅使用一次), 可以这么理解吗?

解决方案 »

  1.   

    >>假定这个接口永远不会再被其他类实现, 这个接口仅使用一次
    如果这样的话,接口的确是没有必要的。
    但是,你真的能这样假定吗?就像20世纪50年代的人认为只需要2个字节来表示日期就够了一样?
      

  2.   

    还有一种接口很有用,那就是标志性接口,这种接口里边没有任何内容,没有字段和方法
    他有用的只是他的名字,只是用来给应用程序一种标识,就是某个类如果实现了这样一个接口,在使用这个类的时候就应用程序就会去做一些特定的事情,例如:
    Serializable接口,序列化接口,这个接口里没有任何内容,但是我们的类在实现这个接口以后,程序就会自动把这个类持久化。
      

  3.   

    >>假定这个接口永远不会再被其他类实现, 这个接口仅使用一次
    如果这样的话,接口的确是没有必要的。
    但是,你真的能这样假定吗?就像20世纪50年代的人认为只需要2个字节来表示日期就够了一样?
    -----------------------
    对于平时大部分人做的项目的某个功能模块来说是可以这样假定的, 一般人做的项目不会是那种在未来几十年还会继续被使用吧.还有一种接口很有用,那就是标志性接口,这种接口里边没有任何内容,没有字段和方法
    ----------------------
    嗯, 这是接口的另一个用法和好处.
      

  4.   

    没有用的接口sun公司就不会做他了,如果接口过时公司会用新接口代替他的
      

  5.   

    >> 对于平时大部分人做的项目的某个功能模块来说是可以这样假定的, 一般人做的项目不会是 那种在未来几十年还会继续被使用吧.你能系统分析/设计时,甚至是编码时的决定在系统开始运行后就不会发生变化了吗?
    不要说几十年,可以一年不到,用户需要就有所变化了。如果什么都可以在做项目时完全确定了,那到时容易了,呵呵另外,考虑类似JDBC这样的API,为什么JAVA定义为接口呢?它就是不知道有多少数据库供应商会提供驱动,难道说现在只有SQLSERVERL、Oracle等几个数据库产品,它就只给几个类了吗?系统是要有可扩充性的。
      

  6.   

    >> 对于平时大部分人做的项目的某个功能模块来说是可以这样假定的, 一般人做的项目不会是 那种在未来几十年还会继续被使用吧.你能系统分析/设计时,甚至是编码时的决定在系统开始运行后就不会发生变化了吗?
    不要说几十年,可以一年不到,用户需要就有所变化了。如果什么都可以在做项目时完全确定了,那到时容易了,呵呵另外,考虑类似JDBC这样的API,为什么JAVA定义为接口呢?它就是不知道有多少数据库供应商会提供驱动,难道说现在只有SQLSERVERL、Oracle等几个数据库产品,它就只给几个类了吗?系统是要有可扩充性的。
    -------------------------
    你没看懂我的意思吧, 我从来也没说接口没有用, 我是说为类都专门写一个接口, 这种做法是没有意义的. 我就是想确认我的这种想法正确与否, 是否在这种情况下接口会带来除了扩充性之外的其他好处. 换句话说一个接口仅仅被实现了一次而且将来也不会再被实现, 那么这个接口根本就不应该被创建, 这种想法对否? 
    PS: 至于这个接口将来是不是真的会被再次实现不是我现在关心的问题, 我并不是想讨论这个.