接口与抽象类的区别
Posted zhuang229
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了接口与抽象类的区别相关的知识,希望对你有一定的参考价值。
介绍
开闭原则
开闭原则(Open-Closed Principle, OCP):一个软件实体应当对扩展开放,对修改关闭。即软件实体应尽量在不修改原有代码的情况下进行扩展。
抽象类
概述: 在面向对象的概念中,所有的对象都是通过类来描绘的。而当需要更多信息来 描述/确定 一个具体的、符合应用场景的对象时,就需要 推迟 确定具体的实现。抽象类 主要针对实体抽象
特点: 抽象类 是一个 未完全实现逻辑 的类,类中可以同时具有 具体实现逻辑 和 抽象逻辑
- 具体实现逻辑:具体实现方法,成员变量,静态方法等等
- 抽象逻辑:抽象方法
总结: 具体实现逻辑 提高复用性 ,抽象逻辑 降低耦合 ;抽象类封装确定的,开放不确定的,推迟到合适的子类中去实现
接口
概述: 接口由抽象类进化而来的,可以看作一种契约(协议),约束着服务的生产者和消费者。接口 主要针对动作(方法)抽象
特点: 接口 是一个 完全未实现逻辑 的“类”,只具有 抽象逻辑
- 抽象逻辑:接口中全都是抽象方法
- 抽象方法的访问修饰符必须为 public ,因为这标志着对服务的消费者和生产者双方都可见,体现“契约”这个概念
总结: 接口是一种“契约”,将具有共性动作(方法)的类抽象成接口,由接口派生出实现类,减少类之间的依赖带来的紧耦合。借用接口,自底向上完成重构,自顶向下完成设计
区别
设计层面
- 抽象类 是一个 未完全实现逻辑 的类;接口 是一个 完全未实现逻辑 的“类”
- 抽象类针对实体抽象;接口针对动作抽象
- 抽象类和接口都能解耦。抽象类主要为了 复用 ;接口主要为了 解耦 ,相比抽象类解耦更彻底和强力
使用层面
- 对于一个派生类来说。 抽象类只能被 单继承 ;接口可以被 多实现
- 抽象类中能有成员变量、具体实现方法、抽象方法等等;接口只能有抽象方法(Java中能有常量)
- 抽象类中除了抽象方法不能private,其他的成员变量或方法访问修饰符随意;接口中的抽象方法访问修饰符全部为public的
- 有抽象方法的类必须定义为抽象类,抽象类不一定有抽象方法
- 抽象类除了涉及抽象有关的部分,和 普通java/C#类 定义基本一致
以上是关于接口与抽象类的区别的主要内容,如果未能解决你的问题,请参考以下文章