共同点:
1、代表系统的抽象层
2、都不能被实例化
3、都能包含抽象方法:
不同点:
1、在抽象类中可以为部分方法提供默认实现(有利于代码重用;也有利于扩展功能:比如我要增添一个功能的时候,我只需要再在父类里面增加一个普通方法就好了,所有的子类都不需要改变。),而接口中只能包含抽象方法(同时接口一旦对外公布了,那就代表我有这个功能,那他就必须是稳定的,不能随意地去更改。一旦更改,该接口下面的一片实现类都得改。)。
2、一个类只能继承一个直接的父类(原因是:如果允许一个类继承多个父类的话,在动态绑定时会非常复杂或者出错),但可以实现多个接口(java虚拟机不会和接口绑定,而是和接口的实现类绑定)
3、已存在的继承树,可以方便的抽取接口,但是抽取抽象类不容易
使用原则:
1、接口做系统与外界交互的窗口(接口提供服务)
2、接口本身一旦制定,就不允许随意修改
3、抽象类可完成部分功能实现,还有部分功能可作为系统的扩展