为什么阿里巴巴建议开发者谨慎使用继承?

简介: 对于很多开发者来说,继承肯定都是不陌生的。但是,继承一定适合所有的场景吗?毫无忌讳的使用继承来做代码扩展真的好吗?

作者 | Hollis

从学习Java的第一天起,我们就知道Java是一种面向对象语言,而学习Java的第二天,我们就知道了面向对象的三大基本特性是:封装、继承、多态。

所以,对于很多开发者来说,继承肯定都是不陌生的。但是,继承一定适合所有的场景吗?毫无忌讳的使用继承来做代码扩展真的好吗?

为什么《阿里巴巴Java开发手册》中有一条规定:谨慎使用继承的方式进行扩展,优先使用组合的方式实现。

image.png

本文就来针对这些问题,简单分析一下。

面向对象的复用技术

每个人在刚刚学习继承的时候都会或多或少的有这样一个印象:继承可以帮助我实现类的复用。所以,很多开发人员在需要复用一些代码的时候会很自然的使用类的继承的方式,因为书上就是这么写的(老师就是这么教的)。但是,其实这样做是不对的。长期大量的使用继承会给代码带来很高的维护成本。

前面提到复用,这里就简单介绍一下面向对象的复用技术。

复用性是面向对象技术带来的很棒的潜在好处之一。如果运用的好的话可以帮助我们节省很多开发时间,提升开发效率。但是,如果被滥用那么就可能产生很多难以维护的代码。

作为一门面向对象开发的语言,代码复用是Java引人注意的功能之一。Java代码的复用有继承,组合以及代理三种具体的表现形式。

来源 | HollisChuang's Blog

相关文章
|
SQL 缓存 Oracle
为什么阿里巴巴禁止使用 count(列名)或 count(常量)来替代 count(*)
本文介绍了COUNT函数的用法,主要用于统计表行数。主要用法有COUNT(*)、COUNT(字段)和COUNT(1)。
12838 0
为什么阿里巴巴禁止使用 count(列名)或 count(常量)来替代 count(*)
|
存储 数据采集 前端开发
用Requests+Cookie,轻松获取淘宝商品数据!
大家好,我是志斌! 最近身边一直有朋友说用Selenium无法爬取淘宝的商品数据了,问问有没有其他的爬取方式,来获取淘宝的商品数据。方法当然有了,下面我就给大家介绍一个Requests+Cookie来获取淘宝数据的方法。
1456 0
用Requests+Cookie,轻松获取淘宝商品数据!
|
6月前
|
搜索推荐 API 开发者
支持"同款搜索"(精确匹配)和"相似搜索"(模糊匹配)两种模式
图搜接口对图片的一个要求:图片不要大于2兆,600*600像素大小,要符合系统规则,图片尽量清晰, 图片越小越好,处理API返回的错误码和异常情况。
|
5月前
|
机器学习/深度学习 监控 数据可视化
基于YOLOv8的南瓜叶片病害分类检测识别|完整源码数据集+PyQt5界面+完整训练流程+开箱即用!
基于YOLOv8的南瓜叶片病害检测系统,集成PyQt5可视化界面,支持图片、视频、摄像头实时检测,可识别细菌性叶斑病、霜霉病、白粉病、花叶病及健康叶片。含完整数据集、训练代码与预训练权重,开箱即用,适用于智慧农业、科研教学等场景,助力高效精准植保管理。
|
5月前
|
存储 弹性计算 运维
阿里云轻量应用服务器全解析:实例类型、规格性能、使用优势及问题解答FAQ
阿里云轻量应用服务器,专为建站、开发测试等场景设计,具备轻量化、贴近应用、成本可控、可进化四大优势。提供五大实例类型,适配多元需求,200Mbps带宽起步,38元/年起,助力用户高效上云。
|
9月前
|
人工智能 架构师 程序员
学历对程序员的深远影响:2025年的现实与思考-优雅草卓伊凡
学历对程序员的深远影响:2025年的现实与思考-优雅草卓伊凡
292 12
学历对程序员的深远影响:2025年的现实与思考-优雅草卓伊凡
|
9月前
|
机器学习/深度学习 算法 安全
小场景大市场:猫狗识别算法在宠物智能设备中的应用
将猫狗识别算法应用于宠物智能设备,是AIoT领域的重要垂直场景。本文从核心技术、应用场景、挑战与趋势四个方面,全面解析这一融合算法、硬件与用户体验的系统工程。
750 0
|
缓存 自然语言处理 物联网
|
缓存 安全 Java
Java中线程池,你真的会用吗?
本文我们就来围绕这个问题来分析一下为什么JDK自身提供的构建线程池的方式并不建议使用?到底应该如何创建一个线程池呢?
10338 123
Java中线程池,你真的会用吗?