接口是抽象类的变体。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。
    接口的好处是,它给出了屈从于Java技术单继承规则的假象。当类定义只能扩展出单个类时,它能实现所需的多个接口。

解决方案 »

  1.   

    interface更具抽象,因为面向对象的最高境界是面向抽象编程!
    接口可以百分百的保证移植和扩展的安全性。
    抽象类随可以有实现,但缺乏安全性和灵活性。
    其实最好的使用方法是两者结合使用!!!
      

  2.   

    补充一点接口中的方法,你必须都去实现而abstract类中只有static的方法必须实现一个类可以实现很多接口,但只能继承一个abstract类。
      

  3.   

    如果你的子类有相同的方法而且实现方式也一样的话,就可以用abstract类做基类,如果基类仅仅是定义接口也就是说定义子类要干什么,至于怎么干不管的话,那就用interface,另外还可以考虑多重继承的问题,如果用了abstract类的话就不能像interface一样,可以实现几个了.
      

  4.   

    大家讲的真好。。 支持+UP“我感觉abstract完全可以替代interface”
      因为interface 比abstract更抽象,所以这样子认为可能不大好。。因为我们本来就是为了让程序“抽象”  
       如果你用interface完全代替abstract。。那从构架上讲是可行的。(当然视具体情况而定)。
      

  5.   

    接口是抽象类的变体。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。
        接口的好处是,它给出了屈从于Java技术单继承规则的假象。当类定义只能扩展出单个类时,它能实现所需的多个接口。
    同意
    abstract  不仅可以有abstract方法  还可以有实例方法
      

  6.   

    这个问题提地很好!!!
    我对JAVA刚入门我们在OOD是时常会遇到许多问题,最头痛就要数如何抽象了,不知道大家对Design Patterns有什么想法?在设计中为了能满足OCP(Open-Closed Principle),我们在设计类的时候常常要分成许多层次,就像一棵树一样。其中有人提出,建议叶子节点的类都为Class,而有儿子的节点最好为Abstract Class or Interface,当然不排除使用Adapter Pattern中使用Adapter Class再派生出子类的做法。(可以参见 Factory Method Patterns)
    那合适使用Abstract Class or Interface???在阎宏博士的《Java与模式》中提到了(我在看这本书,不知道究竟如何?)Interface可以分为Identifier Interface and Constant Interface,他认为有共同商业逻辑的要选择Abstract Class,没有共同商业逻辑的可以选择Interface,其中可以不带任何Method defination。我认为把对象抽象成多层次的优点是很明显的,以后我添加类,只要在某一层下继承或实现就可以了,完全符合OCP。如果你有兴趣可以看看java.util下的 Collection Framework中,Collection 就是个Interface,而Set , List(Interface)又是继承了Collection,但是当进一步细化是又产生了AbstractCollection,AbstractSet,AbstractList。而后面的ArrayList,Vector又是继承了这些AbstractClass.以上是我个人观点,其实说一个设计好的项目是很简单的,但是要自己去设计时又会遇到许多问题,往往是自己设计好的方案,再自己推翻,逐步(gradually)细化形成的。
    很累呀,所以设计师是应该拿高薪。
    希望有兴趣的朋友给我来mail:[email protected]
    MSN: [email protected]