不同点:
抽象类:声明方法的存在,而不去实现它的类称为抽象类
- 抽象类中可以定义构造器
- 可以有抽象方法和具体方法
- 接口中的成员全都是 public 的
- 抽象类中可以定义成员变量
- 有抽象方法的类必须被声明为抽象类,而抽象类未必要有抽象方法
- 抽象类中可以包含静态方法
- 子类使用extends关键字来继承抽象类。如果子类不是抽象类的话,它需要提供抽象类中所有声明的方法的实现。
接口:抽象类的变体
- 接口中不能定义构造器
- 接口中的所有方法都是抽象的,
- 抽象类中的成员可以是 private、默认、 protected、 public
- 接口中定义的成员变量实际上都是常量
- 接口中不能有静态方法
- 一个类可以实现多个接口
- 子类使用关键字implements来实现接口。它需要提供接口中所有声明的方法的实现
相同点:
- 不能够实例化
- 可以将抽象类和接口类型作为引用类型
- 一个类如果继承了某个抽象类或者实现了某个接口都需要对其中的抽象方法全部进行实现,否则该类仍然需要被声明为抽象类