从概念上看
抽象类要描述的是一种类型,和普通的实现类一样描述着的现实世界的事物,不同的是普通的实现类描述着一种具体的事物,如三角形,圆形。而抽象类描述的是一种抽象的事物,如形状,动物等。
接口要描述的更多的是一种形为,如现实世界的事物所具体的功能和特点。实现类可以实现多个接口而具有多个功能和特点。
一种事物可能具体多种形为、功能,但是只属于一种类型。
java对抽象类和接口的实现上也和上面的概念相符合,一个实现类只能继承一个抽象类,而可以实现多个接口。
所以,如果要描述的是一种类型就应该使用抽象类。如果要描述的是一种形为就应该使用接口。