# Java 组合优于继承:理解和实践
在面向对象编程中,继承和组合是两种重要的代码复用方式。尽管继承在某些情况下是有用的,但Java的设计指导原则更倾向于“组合优于继承”。本文将通过实例和图示来探讨这个原则以及其背后的原因。
## 继承的局限性
继承允许一个类(子类)从另一个类(父类)获取属性和方法。虽然这使得代码复用变得简单,但也带来了以下问题:
1. **紧耦合**:子类依赖于父类的
原创
2024-10-21 07:38:58
37阅读
在平时
原创
2022-09-14 00:41:28
626阅读
*面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式。*数组虽然也可以存储对象,但长度是固定的;集合长度是可变的,数组中可以存储基本数据类型,集合只能存储对象。*集合类的特点:集合只用于存储对象,集合长度是可变的,集合可以存储不同类型的对象。 集合框架图1、Collection (集合的最大接口)继承关系 ——Li
转载
2023-08-02 09:23:09
43阅读
集合根据存储方式的不同分为两大类:实现Collection接口类下的集合 和 实现Map接口类下的集合Collection(由于继承了Interable接口,所以以下所有的都是可遍历的):Collection接口下的所有的集合都是以单个元素进行存储的,下面有两个大的子类接口,分别是List接口和Set接口。(List接口和Set接口都继承了Collection接口,而Collection接口又继承
转载
2023-09-23 20:52:28
52阅读
先来个整体印象。如图所示,JS中继承可以按照是否使用object函数(在下文中会提到),将继承分成两部分(Object.create是ES5新增的方法,用来规范化这个函数)。
转载
2023-06-15 16:40:31
144阅读
https://stackoverflow.com/questions/49002/prefer-composition-over-inheritance 解答1 Prefer composition over inheritance as it is more malleable / easy t
转载
2019-02-01 10:52:00
799阅读
2评论
在开发中,我们经常会遇到一种情形:有的类,根据不同的属性(Tag),可以表现出不同的行为。比如:我们有一个图形类Figure,它可以表现圆形Circle、矩形Rectangle。你会怎么设计呢?标签一般情况下,我们会显式的添加一个额外的标签,来表示此时的Figure需要表现的行为/** * 使用标签 */public class TagFigure private enum Shape {
转载
2022-09-14 00:47:01
52阅读
1、继承是一种多态工具,而不是一种代码复用的工具。继承的错误使用:有些开发者喜欢坏所有的子类,因为子类和父类的紧耦合关系在编译时就产生了。3、不要仅仅为了多态...
转载
2023-02-23 12:28:59
220阅读
当你创建自己的类型,一种有效的建议就是去重新实现那些属于Object类的一些方法——toString()、equals()、hashcode()。没错,这些都是正确的建议。
转载
2011-08-19 22:48:00
55阅读
2评论
无论什么时候,都应该使用PreparedStatement ,而不是Statement。 1、 PreparedStatement 接口继承Statement。作为作为 Statement 的子类,PreparedStatement 继承了 Statement 的所有功能。PreparedStatement 三种方法execute、 executeQuery 和 executeUpdate 已被
转载
2024-05-28 07:41:40
18阅读
根据网络上大家对继承和组合的讨论,我简单总结以下几点: 1)组合(has-a)关系可以显式地获得被包含类(继承中称为父类)的对象,而继承(is-a)则是隐式地获得父类的对象,被包含类和父类对应,而组合外部类和子类对应。 2)组合关系在运行期决定,而继承关系在编译期就已经决定了。 3)组合是在组合类和被包含类之间的一种松耦合关系,而继承则是父类和子类之间的一种紧耦合关系。 4)当选择使用
转载
2023-08-11 20:03:34
66阅读
面向对象编程中,有一条非常经典的设计原则,那就是:组合优于继承,多用组合少用继承。同样地,在《阿里巴巴Java开发手册》中有一条规定:谨慎使用继承的方式进行扩展,优先使用组合的方式实现。
为什么不推荐使用继承
每个人在刚刚学习面向对象编程时都会觉得:继承可以实现类的复用。所以,很多开发人员在需要复用一些代码的时候会很自然的使用类的继承的方式,因为书上就是这么写的。继承是面向对象的四大特性
转载
2021-07-02 17:45:21
73阅读
面向对象编程中,有一条非常经典的设计原则,那就是:组合优于继承,多用组合少用继承。同样地,在《阿里巴巴Java开发手册》中有一条规定:谨慎使用继承的方式进行扩展,优先使用组合的方式实现。为什么不推荐使用继承每个人在刚刚学习面向对象编程时都会觉得:继承可以实现类的复用。所以,很多开发人员在需要复用一些代码的时候会很自然的使用类的继承的方式,因为书上就是这么写的。
转载
2021-07-13 14:08:11
34阅读
组合和继承是面向对象中两种代码复用的方式。组合是指在新类里面创建原有类的对象,重复利用已有类的功能。继承是面向对象的主要特性之一,它允许设计人员根据其它类的实现来定义一个类的实现。组合和继承都允许在新的类中设置子对象(subobject),只是组合是显式的,而继承则是隐式的。组合和继承存在着对应关系:组合中的整体类和继承中的子类对应,组合中的局部类和继承中的父类对应。
二者的区别在哪里呢?首先分
转载
2023-07-19 07:27:28
224阅读
面向对象编程中,有一条非常经典的设计原则,那就是:组合优于继承,多用组合少用继承。同样地,在《阿里巴巴Java开发手册》中有一条规定:谨慎使用继承的方式进行扩展,优先使用组合的方式实现。
为什么不推荐使用继承
每个人在刚刚学习面向对象编程时都会觉得:继承可以实现类的复用。所以,很多开发人员在需要复用一些代码的时候会很自然的使用类的继承的方式,因为书上就是这么写的。继承是面向对象的四大特性之一,
转载
2021-07-05 09:43:13
172阅读
继承1.继承和组合1.1 继承的意义1.2 继承的结构1.3 继承的规则1.4 super关键字1.4.1 功能1——在子类中调用父类的成员变量或者方法1.4.2 功能2——在子类中调用父类的构造方法1.5 构造方法1.6 super和this的比较1.7 再谈构造代码块和构造方法的执行顺序1.8 再谈访问修饰限定符1.9 继承方式2.final关键字2.1 final修饰变量2.2 final
转载
2024-06-15 20:29:30
155阅读
本文主要说明Java中继承与组合的概念,以及它们之间的联系与区别。首先文章会给出一小段代码示例,用于展示到底什么是继承。然后演示如何通过“组合”来改进这种继承的设计机制。最后总结这两者的应用场景,即到底应该选择继承还是组合。1、继承假设我们有一个名为Insect(昆虫)的类,这个类包含两个方法:1)移动move(); 2)攻击attack()。 代码如下:class Insect {
p
转载
2023-07-19 09:43:01
17阅读
面向对象的复用技术 复用性是面向对象技术带来的很棒的潜在好处之一。如果运用的好的话可以帮助我们节省很多开发时间,提升开发效率。但是,如果被滥用那么就可能产生很多难以维护的代码。 作为一门面向对象开发的语言,代码复用是Java引人注意的功能之一。Java代码的复用有继承,组合以及代理三种具体的表现形式。本文将重点介绍继承复用和组合复用。继承继承是一种联结类与类的层次模型。指的是一
转载
2023-06-05 22:53:56
89阅读
Java集合框架相关基础知识点汇总
前言 Java的集合框架比较基础,像 List、Map、Set 中大概10来个比较常见的集合类,建议多看几遍源码(这里主要是基于 Java 8),然后回过头再来看看各路博客总结的这些知识点,会有一种豁然开朗的感觉。本文的目录结构如下:一、Java的基础集合分类和继承结构二、基本特征三、集合的几种实现四、集合常见的实现
转载
2023-07-19 07:38:06
73阅读
1)组合(has-a)关系可以显式地获得被包含类(继承中称为父类)的对象,而继承(is-a)则是隐式地获得父类的对象,被包含类和父类对应,而组合外部类和子类对应。 2)组合关系在运行期决定,而继承关系在编译期就已经决定了。 3)组合是在组合类和被包含类之间的一种松耦合关系,而继承则是父类和子类之间的一种紧耦合关系。
4)当选择使用组合关系时,在组合类中包含了外部类的对象,组合类可以调用外部类必须
转载
2023-07-18 14:41:16
42阅读