在写法上
在JDK1.8 之前:
抽象类
- 不能被实例化,但可以有构造方法
- 可以有普通方法(非抽象方法)
- 可以有属性
- 方法,属性等可以被四个访问修饰符修饰
接口
- 不能被实例化,不能有构造方法
- 方法只能是抽象方法,默认带有 public abstract 修饰
- 属性都是常量,默认带有 public static final 修饰
jdk1.8之后:
抽象类的变化并不大,接口变化比较大
接口
- 接口中可以有默认实现方法 或 静态实现方法
在设计上
抽象类:
是对同一事物的抽取,是对同一类事物的特征的抽象。使用抽象类更多的表示的是一类事物的特征的抽取,比如可以定义一个人类,人类中可以有很多子类类,比如老师,学生,白领,工人等,子类和抽象类之间构成体系。父类是子类共同特征的提取。
接口:
更像一种标准的制定,定制系统之间对接的标准,更像是对一种功能的规定。比如说 USB 接口,HDMI 接口,每一个接口都是一种规则,拥有某个接口就具有了这个接口相应的功能。