抽象类和接口都用于实现抽象,我们可以声明抽象方法。抽象类和接口都无法实例化。
abstract class表示的是"is a"关系,interface表示的是"like a"关系。
接口 | 抽象类 | |
---|---|---|
关键字 | implements | extends |
继承 | 接口支持多重继承。 | 抽象类不支持多重继承。 |
变量 | 接口只有静态和最终变量。 (默认 public static final) | 抽象类可以有final,non-final,static和non-static变量。 |
方法 | 接口方法默认修饰符是public,你不可以使用其它修饰符。 接口只能有抽象方法。Java 8开始,也可以有默认和静态方法。 ( 默认 public abstract) | 抽象方法可以有public、protected和default这些修饰符 抽象类可以有抽象和非抽象方法。 |
构造器 | 接口不能有构造器 | 而抽象类可以有构造器 |
执行速度 | 慢 | 快 |
相互实现 | 接口不能提供抽象类的实现。 | 抽象类可以提供接口的实现。 |
示例:
public abstract class Shape {
public abstract void draw();
}
public interface Drawable {
void draw();
}