(1)接口可以被多重implements,抽象类只能被单一extends
(2)接口只有定义,抽象类可以有定义和实现
(3)接口的字段定义默认为:public static final, 抽象类字段默认是"friendly"(本包可见)
当功能需要累积时用抽象类,不需要累积时用接口。.
  
 
1.一个类可以实现任意多个接口,但它最多只能扩展一个抽象类。
2.一个抽象类可以含有若干个非抽象方法,而一个接口的所有方法都是抽象的,无论
   是否将它的方法显式的声明为抽象的。
3.抽象类可以声明和使用字段;而接口却不能,尽管接口可以常见static final常量。
4.抽象类方法的可见性修饰可以是public,protected,private或者无修饰符;而接口方法的可见性修饰符只能是public。
5.抽象类可以定义构造器;而接口不行。
 
 
 
1、在面向对象设计中如果定义一个动作,一般使用Interface而不使用AbstractClass,这样有利于程序扩展;
2、AbstractClass一般用来定义概念性对象以便进行等级结构的定义,但是在框架设计中抽象对象也经常使用Interface来定义,目的是为使适应不同客户的扩展需求
 
 
网上搜索的抽象类与接口相关的解释
我想用比较通俗的方法告诉你: 
假如有两个程序员,两个在两个程序里都要用到一种功能,比如要取一个对象名。 
甲自己做了一个方法叫 getname ,乙也作了一个方法叫 qumingzi 。如果两个人要去看对方的程序,那么这个方法要读懂是不是要有一个过程? 
如果在公司里,有个抽象类,离面有个抽象方法较 getName, 公司规定,凡遇到这样的问题就实现这个方法。那么这两个人要读对方的代码是不是就容易了?
 
再来一个 : 
假如很多人要买水果吃,吃的动作只有一个,但是有的人要用现金买,有的人用信用卡,有的人赊帐。要为每个人定义一个类,就要定义多个相同的吃的方法。如果定义一个抽象类,在里面实现吃的方法,再做一个买的抽象方法。那每个人的类都从这个抽象类派生下来,只要实现买的方法即可,吃的方法就可以直接用父类的方法了。如果要改吃的方法就不用改多个,只要改这个抽象类里的就行了。
 
 
 
举个简单的例子 : 古希腊神话中的飞马。它既能奔跑(马的方法),又可以飞(鸟的方法)。在 C++ 中可以通过多重继承来实现,但在 JAVA 中则必须通过接口来实现。或者继承马的方法,并实现一个鸟飞的接口。或者同时实现一个跑的接口和飞的接口。 
接口具有良好可扩展性。有了跑和飞的两个借口,你可以轻松的做出飞猪,飞驴等具有类似功能的对象。 
接口中不得实现任何方法。一个类一旦要实现一个接口,则必须实现改接口的所有方法,即使在该方法中不执行任何操作(即方法体内为空)。 
接口与抽象类具有类似的功能。在使用上,一般接口用于定义比较普遍的方法(功能),而抽象类主要用于比较具体的方法(本能)