抽象类的一个有趣的应用是可以定义一个不能被实例化但有静态方法的类。这是接口和类都办不到的。例如我有一个类,只有几个静态方法,而我只希望用户通过类来访问这些方法,通过定义抽象类就可以阻止用户创建该类的实例。

abstract class用于实现 ‘依赖倒换原则(DIP)’
而interface用于实现‘接口依赖原则(ISP)’

有类似,但是有不同,
用途不同,:)

接口可以方便的实现回调:)

1.abstract class就是你的类与生据来的一些特性,比如你是人,那么你就会直立行走;
2。interface好比合同,如果你的类有某个interface,那么就应该实现它,比如你是人,目前是softwareengineer,那么应该会写helloworld。

使用上interface 优先于抽象类,使用起来更方便,特别是在定义类型上,
但是用abstractclass 定义一个方法, 并且实现这个方法, 那么这个类的子类中, 都有了这样一个方法的默认实现, 接口就做不到这一点

《effective Java》和《Java 模式》中好象都说过这个问题, 我的理解是计个样子的:
abstract Class 可以加入一些共性的方法, 譬如一个大学的学生, 不论是本科, 大专,还是博士,他们都要有获取一个方法获取性别,
public String getSex(){
//return "F" or "M";
}
但是不同级别的学生,判断他们是否可以毕业条件则不相同, 但每种学生
都必须有这个方法, 所以可以设置一个抽象方法:
public boolean isCanGraduate(){}
接口里面不能含有实体方法, 这是选择时的一个重要区别。此外接口可以被多重implements ,为了兼顾两个优点, 有一种模式叫适配器模式。如
public abstract class MouseAdapter extends Object implements ouseListener{
}

建议看看
http://www-900.ibm.com/developerWorks/cn/java/l-javainterface-abstract/index.shtml
深入理解abstract class和interface

有意思,我感觉在JDK的帮助里abstract class比interface多.

我比较赞同CC的说法。我个人也是这样认为的接口的存在可以说某种意义上是为了多继承。

理解抽象的思想
一个基于类
一个基于行为