相同点
抽象类和接口都不能被直接实例化。
不同点
- 抽象类是用abstract修饰的类,而接口是用interface来定义。
- 抽象类是被子类继承(extends),而接口是被子类实现(implements)或者被子接口继承(extends)。并且遵循“单继承多实现”。
- 抽象类中可以有具体的实现方法,接口中所有的方法时没有具体的实现的。
- 抽象类中的成员变量可以是各种类型,接口中的成员变量都是常量(也就是public static final类型的)。
延伸
抽象类与抽象方法的关系:抽象类不一定包含抽象方法,有抽象方法的类一定是抽象类。
Java中提倡“面向接口编程”,为什么还要使用抽象类呢?通常在“既要约束子类的行为,又要为子类提供公共功能”的时候使用抽象类。