大致的来说,interface也许算是abstract class的变体,都不可以实例化。只不过有些地方有区别,比如子类:interface是实现(还可以多个),abstract class是继承(单个)。

比较

内容 abstract class interface
成员变量 可以拥有自己的成员变量 如果要有必须为 static final
方法类型 private、不是abstract public abstract
实例化 不可以实例化,且子类都必须实现已声明的抽象方法
子类数量 一个类只能继承一个abstract class 一个类实现多个interface
子类的方法 可以选择性的实现哪些方法 某个方法必须实现
与子类的联系 abstract class中可以有非抽象的方法,子类中是必须实现有abstract的方法。非abstract方法可以选择继承或者重写覆盖。 interface中的方法都是抽象的,而且默认的都是public,且不能声明private和protected。
使用场景 重要的就是需要一个统一的接口并且需要声明一个变量的情况,不希望也不需要子类实现所有的方法,只需要子类实现某些特定的方法。并且可以有共用的方法,也可以考虑abstract class。 不在乎他的子类是如何实现的,只需要保证接口一致的协调性。需要多种类型的方法,但是又是分开写的互不干扰,可以选择interface的形式。

注:interface 可以拿来定义一些常量,而不使用static class来定义。