1.抽象类是对一种事物的抽象,即对类抽象,而接口是对行为的抽象。

2.抽象类是对整个类整体进行抽象,包括属性、行为,但是接口却是对类局部(行为)进行抽象。

3. 继承是一个 “是不是”的关系,而 接口 实现则是 “有没有”的关系。如果一个类继承了某个抽象类,则子类必定是抽象类的种类,而接口实现则是有没有、具备不具备的关系。

4.接口只给出方法的声明,不给出方法的实现。抽象类中可以有抽象方法的一般方法。如果是抽象方法的话,只有方法的声明。如果是一般方法的话,既有方法的声明,也有方法的实现。

5.Java接口和Java抽象类最大的一个区别,就在于Java抽象类可以提供某些方法的部分实现,而Java接口不可以,这大概就是Java抽象类唯一的优点吧,但这个优点非常有用。

如果向一个抽象类里加入一个新的具体方法时,那么它所有的子类都一下子都得到了这个新方法,

而Java接口做不到这一点,如果向一个Java接口里加入一个新方法,所有实现这个接口的类就无法成功通过编译了,

因为你必须让每一个类都再实现这个方法才行,这显然是Java接口的缺点。

6.一个抽象类的实现只能由这个抽象类的子类给出,也就是说,这个实现处在抽象类所定义出的继承的等级结构中,而由于Java语言的单继承性,

所以抽象类作为类型定义工具的效能大打折扣。

在这一点上,Java接口的优势就出来了,任何一个实现了一个Java接口所规定的方法的类都可以具有这个接口的类型,

而一个类可以实现任意多个Java接口,从而这个类就有了多种类型。

7.从第6点不难看出,Java接口是定义混合类型的理想工具,混合类表明一个类不仅仅具有某个主类型的行为,而且具有其他的次要行为。

8.接口可以把“做什么”和“怎么做”分离开来。这给Java带来了很多好处。

虽然代码量增加了,可我们的程序的可维护性加强了。我们的程序是可以拆分的。