Number | 区别 | 抽象类 | 接口 |
---|---|---|---|
1 | 定义关键字 | abstract class | interface |
2 | 组成 | 属性、常量、抽象方法、构造方法、普通方法 | 抽象方法和全局常量 |
3 | 权限 | 可以使用各种权限 | 只能够是public |
4 | 子类实现 | 利用extends关键字可以继承一个抽象类 | 利用implements关键字可以实现多个接口 |
5 | 关系 | 抽象类可以实现多个接口 | 接口不能够继承抽象类,接口却可以利用extends关键字实现接口的多继承。 |
6 | 对象实例化 | 依靠子类对象的向上转型实现抽象类的实例化操作 | 依靠子类对象的向上转型实现接口的实例化操作 |
7 | 设计模式 | 模板设计模式 | 工厂设计模式、单利设计模式(重点重点再重点) |
8 | 操作局限 | 具有单继承局限 | 没有单继承局限 |
通过机上几点的比较我们发现, 抽象类和接口实际上都可以限制子类必须要覆写的方法要求,但是由于抽象类本身存在有单继承局限,所以再以后的开发中。如果发现抽象类和接口都可以同时使用时,一定要记住接口优先。而抽象类在实际的应用中往往是作为接口与普通类之间的过度类使用。
不同点:
抽象类:
1.抽象类中可以定义构造器
2.可以有抽象方法和具体方法
3.接口中的成员全都是 public 的
4.抽象类中可以定义成员变量
5.有抽象方法的类必须被声明为抽象类,而抽象类未必要有抽象方法
6.抽象类中可以包含静态方法
7.一个类只能继承一个抽象类
接口:
1.接口中不能定义构造器
2.方法全部都是抽象方法
3.抽象类中的成员可以是 private、默认、 protected、 public
4.接口中定义的成员变量实际上都是常量
5.接口中不能有静态方法
6.一个类可以实现多个接口
相同点:
1.不能够实例化
2.可以将抽象类和接口类型作为引用类型
3.一个类如果继承了某个抽象类或者实现了某个接口都需要对其中的抽象方法全部进行实现,否则该类仍然需要
被声明为抽象类