抽象类:是一种不能被实例化的类,当某些类有一些共性的方法和属性的时候,可以定义一个抽象类来抽取这些方法和属性,主要用来共性抽取。
接口:为了扩展新的功能,主要是为了弥补java中不能进行多继承的缺陷。
它们之间的区别可以通过四个方面来进行区分:
抽象类 | 接口 | |
成员变量 | 可以是变量,也可以是常量 | 只能是常量并且必须是静态、公开的 |
成员方法 | 可以是抽象方法,也可以是普通方法 | 只能是抽象方法(在最新的JDK中可以写普通方法) |
构造方法 | 有构造方法 | 没有构造方法 |
类之间的关系 | 抽象类与抽象类之间可以继承并且支持多层继承,可以实现接口 | 接口与接口之间也可以继承并且支持多层继承,只能继承接口不能实现接口 |