面向对象编程中接口与抽象类的比较

简介:

 在面向对象编程中,有两个特殊也是比较难理解的概念,就是接口和抽象类。对于概念不再赘述,可以查阅相关文档。本文重点就接口和抽象类的异同点进行比较,并说明各自的应用环境。

  接口和抽象类之所以特殊,是因为它们有一个不同于一般类的共同特点,在接口和抽象类中可以只写方法而没有具体实现(在接口中绝对不能有具体实现,在抽象类中没有具体实现的方法叫做抽象方法)。至于为什么要有没有具体实现的方法在浅析接口的作用及应用一文中以有介绍。下面主要介绍接口和抽象类的异同点及其各自应用的环境。

  在某种程度上接口想一个抽象类,或者可以说接口是一个纯的抽象类。因为在接口和抽象类中,都可以不用有方法的具体实现(接口中是不能有),不同的是,在抽象类中非抽象方法是有具体实现的。

  接口和抽象类还有一个很重要的不同点就是:类可以继承多个接口,但是只能继承一个抽象类。

   接口和抽象类的不同之处决定了各自有各自的最佳应用环境:

1.  如果预计要创建组件的多个版本,则创建抽象类。因为可以通过更新基类,使所有继承类都自动更新。而接口一般要求在定义后就不能更改,这样是为了保护为使用接口而编写的现有系统。

2.  如果要设计小而简练的功能块,则使用接口;若果要设计大的功能单元,则使用抽象类。因为接口设计往往应该小而且独立,减少发生性能问题的可能性;

3.  如果要在组件的所有实现间提供通用的已实现的功能,则使用抽象类;因为抽象类可以部分实现方法;而接口不能;

4.  若果创建的功能将在大范围的完全不同的对象间使用,则使用接口。



本文转自HDDevTeam 51CTO博客,原文链接:http://blog.51cto.com/hddev/628078,如需转载请自行联系原作者

相关文章
|
Python Windows
Win10安装Python3.9
Win10安装Python3.9
2096 0
|
网络协议 数据处理 网络虚拟化
【HCIA】10.VLAN间通信
【HCIA】10.VLAN间通信
266 0
|
Web App开发 人工智能 Android开发
iconfont.cn 阿里出品的矢量图标库
Iconfont.cn是阿里巴巴推出的矢量图标库,其中涵盖了1000多个常用图标,并在持续更新中。(目前已有7000+图标,部分图标为用户上传,因此默认不公开,但是可以搜索到。)
12520 0
iconfont.cn 阿里出品的矢量图标库
|
消息中间件 缓存 NoSQL
Redis 高并发竞争 key ,如何解决这个难点?
本文主要探讨 Redis 在高并发场景下的并发竞争 Key 问题,以及较为常用的两种解决方案(分布式锁+时间戳、利用消息队列)。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
Redis 高并发竞争 key ,如何解决这个难点?
|
Java 微服务
【Java异常】com.netflix.client.ClientException: Load balancer does not have available server for client
【Java异常】com.netflix.client.ClientException: Load balancer does not have available server for client
933 0
|
机器学习/深度学习 人工智能 算法
强化学习在游戏AI中的应用,从基本原理、优势、应用场景到具体实现方法,以及Python在其中的作用
本文探讨了强化学习在游戏AI中的应用,从基本原理、优势、应用场景到具体实现方法,以及Python在其中的作用,通过案例分析展示了其潜力,并讨论了面临的挑战及未来发展趋势。强化学习正为游戏AI带来新的可能性。
1069 4
|
传感器 机器学习/深度学习 自动驾驶
未来出行的智能革命:自动驾驶技术的进展与挑战
自动驾驶技术正逐步改变我们的交通方式,从辅助驾驶到完全自动化,每一次技术跃迁都带来了新的可能。本文将探讨自动驾驶的发展历程、关键技术里程碑及其面临的主要挑战和未来趋势。
820 4
|
Java 关系型数据库 MySQL
连接MySQL数据库的最优JDBC代码
连接MySQL数据库的最优JDBC代码
|
存储 Serverless API
托管及使用专属智能语音模型CosyVoice
CosyVoice是一款先进的声音合成模型,支持声音克隆与情感控制等功能,在教育、客服、游戏等领域有广泛应用。本文详细介绍如何在阿里云Serverless平台上部署CosyVoice应用,比如使用函数计算平台快速搭建。并且提供API调用方法及本地调试步骤,同时还介绍如何通过挂载NAS实现持久化存储,以及更新模型和定制后端服务的方法。
2385 13
|
Kubernetes 负载均衡 应用服务中间件
k8s学习--ingress详细解释与应用(nginx ingress controller))
k8s学习--ingress详细解释与应用(nginx ingress controller))
2207 0