抽象类指有一些方法还没实现在,只需在类里声明。接口是抽象类的极端表现形式,当没有任何部分功能已实现的时候,就用接口。用abstract来声明类时,即使这个类中一个abstract函数也没有,你也可以这样作,目的是:不想这个类能被创建出实例。

解决方案 »

  1.   

    你可以去看一本书JAVA 设计模式,里面讲得很清楚。接口和抽象类区别
      

  2.   

    1、如果你的实现中包含了大量一抹一样的代码,那么建议用抽象类,可以在其中定义一些比不变的方法。同样,如果你的实现中只是有一些对外的公共接口(与Interface关键字不是一个意思),而具体实现变化颇大,则应该使用接口(Interface)。2、接口是抽象类的进一步抽象化。3、Java中只能单继承,不过如果你使用接口(Interface)技术的话,可以实现多重继承。4、用抽象类可以实现模板方法的设计模式。
      

  3.   

    java设计思想:接口与抽象类优先考虑接口!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      

  4.   

    抽象类的继承性是接口所不能比拟的:BaseClass--->subBaseClass---->subSubClasssubBaseClass 由抽象类BaseClass继承而来,可以重写所有的方法,subSubClass  由subBaseClass继承而来,可以直接继承subBaseClass已重写的方法.接口的实现则必须逐个实现我的想法不知道对否??
      

  5.   

    abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java强大的面向对象能力。abstract class和interface之间在对于抽象类定义的支持方面具有很大的相似性,甚至可以相互替换,因此很多开发者在进行抽象类定义时对于abstract class和interface的选择显得比较随意。其实,两者之间还是有很大的区别的,对于它们的选择甚至反映出对于问题领域本质的理解、对于设计意图的理解是否正确、合理。abstarct class在Java语言中体现了一种继承关系,要想使得继承关系合理,父类和派生类之间必须存在"is a"关系,即父类和派生类在概念本质上应该是相同的中有关于"is a"关系的大篇幅深入的论述,有兴趣的读者可以参考)。对于interface 来说则不然,并不要求interface的实现者和interface定义在概念本质上是一致的,仅仅是实现了interface定义的契约而已。
      

  6.   

    从编程层面看abstract class和interface
    从编程的角度来看,abstract class和interface都可以用来实现"design by contract"的思想。但是在具体的使用上面还是有一些区别的。
    首先,abstract class在Java语言中表示的是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个interface。也许,这是Java语言的设计者在考虑Java对于多重继承的支持方面的一种折中考虑吧。
    其次,在abstract class的定义中,我们可以赋予方法的默认行为。但是在interface的定义中,方法却不能拥有默认行为,为了绕过这个限制,必须使用委托,但是这会增加一些复杂性,有时会造成很大的麻烦。
    在抽象类interface中不能定义默认行为还存在另一个比较严重的问题,那就是可能会造成维护上的麻烦。因为如果后来想修改类的界面(一般通过abstract class或者interface来表示)以适应新的情况(比如,添加新的方法或者给已用的方法中添加新的参数)时,就会非常的麻烦,可能要花费很多的时间(对于派生类很多的情况,尤为如此)。但是如果界面是通过abstract class来实现的,那么可能就只需要修改定义在abstract class中的默认行为就可以了。
    同样,如果不能在抽象类中定义默认行为,就会导致同样的方法实现出现在该抽象类的每一个派生类中,违反了"one rule,one place"原则,造成代码重复,同样不利于以后的维护。因此,在abstract class和interface间进行选择时要非常的小心。