个人认为interface和abstract class差别不大。
感觉平时abstract class用的比较少,都用interface代替了。
大家有什么看法?abstract class具体用到什么地方,
interface又具体用到什么地方?

解决方案 »

  1.   

    interface也是abstract class,它是彻底的abstract
    java不允许多重继承,所以interface解决了这个问题,可以多重implements
      

  2.   

    这个是个基本的问题,你说差别不大,那我要负责的告诉你,他们之间有相似但是不是差别不大在学习这两者区别时,重要的是两者都有抽象方法在里面。但对于abstract而言,可以有实现了的方法,也可以有没有实现的方法,只有方法的定义。在interface中,可以有常量的定义和方法的定义(但没有实现体)。接口类是抽象类的特殊形式。还有一种通俗的解释如下
    1.接口可以多重继承 ,抽象类不可以 
    我的解释:
    如果你在面试这么说会判定你的思想是错的,java中并没有多重继承的概念,此处这么说
    是说他好比是多重继承一样,但是却不是。2.接口定义方法,不给实现;而抽象类可以实现部分方法
    我的解释:抽象类中可以有非抽象的方法,但是接口中都是抽象方法3.接口中基本数据类型的数据成员,都默认为static和final,抽象类则不是
    这个我就不解释,说的很明白如果事先知道某种东西会成为基础类,
    那么第一个选择就是把它变成一个接口。
    只有在必须使用方法定义或者成员变量的时候,才应考虑采用抽象类。
      

  3.   

    ricky414(苦熬三四年,一把心酸泪,日夜敲代码,谁解其中味) 已经从基本理论上说明得很清楚了,如果还有什么其他的差别那就是在设计中的继承的差别了。如果从一个抽象类的继承的话,说明子类和父类之间是is-a的关系,简单的理解就是杨树类继承抽象类树,说明杨树是一棵树(好像是废话)。如果从接口的继承,说明实现接口的类和接口是has-a的关系,简单理解就是实现接口的类需要完成接口的功能。但是在设计的时候要视具体情况定,从接口的继承也可以表示is-a的关系。
      

  4.   

    一般interface用的多
    但是有一种情况可能用abstract class:
    abstract class shape
    {
      int height;
    }
    class triagle extends shape
    {
    ...
    }
    class square extends shape
    {
    ...
    }
    上面square,triagle 都有成员height
    但interface 就不行,因为它的定义的成员默认就是final static
      

  5.   

    对于模版模式就是借助了抽象类。要将大部分实现往上层集中。子类只需实现策略部分,这在接口中怎么能做到呢?还有缺省时配模式,记得各种各样的监听器吗?比如MouseAdapter类,就是抽象类,她为使用鼠标事件的用户提供了各个事件的平庸实现,当你使用单击事件的时候,不需要实现所有的事件。它的作用是接口能实现的吗?
      

  6.   

    声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。 
      接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。 
      

  7.   

    赞成 ricky414(苦熬三四年,一把心酸泪,日夜敲代码,谁解其中味)抽象类和接口从逻辑上来说有本质的区别,虽然许多人从功能的角度上把它们看做相当。抽象类,再抽象也是一个类,一个普通类能有的所有东西它都可以有,如成员,构造函数等等。和普通类相比,唯一严格的区别就是它不能被直接实例化。尽管如此,它仍然可以通过子类的实例化而被间接实例化。而接口只是一些声明,并不是一个“实体”,它不能单独存在,只能依附于某个类而存在,所以在它里面不能有任何“实”的东西。接口是比类更高级的抽象。