Java组合

news/2026/1/16 23:40:49/文章来源:https://www.cnblogs.com/ethan-nobug/p/19494347

Java组合

组合Composition和组合和继承的关系:
另一种 实现“代码复用”——组合。
相较于继承,组合更加灵活。继承一个子类只有一个直接父类,而组合就可以解决这个问题。
组合是区别于继承的另一种代码复用机制。
本质是类A将类B的对象作为自己的属性形成新的组合,通过该属性使用类B的属性和方法。
场景:
在对真实世界建模方面,适合于“has-a”关系,如车子有引擎、电脑包含CPU、存储器、显示器等关系。
实现:
1.基本组合 实现
在类信息代码里,声明持有组件对象
在类的构造器里,创建组件(创建被组合类的对象),如
`
// Java300集 例子
// 可用组合重写继承,注意组合并不要求类之间存在继承关系
public class Demo3_inherit_2_composition {
public static void main(String[] args) {
Student s = new Student("高小七",172,"Java");
s.study();// 调用成员方法

}

}
class Person {
private String name;
private int height;

public Person(String name, int height) {this.name = name;this.height = height;
}public void rest() {System.out.println("光学习不玩耍,聪敏的杰克也变傻!");
}

}
class Student{
private String major;
private Person p;// Person类将作为一个属性,其属性,方法都可以依此调用

public Student(String name,int height,String major) {this.p = new Person(name,height);this.major = major;}
public void study() {System.out.println("好好学习,天天向上!");p.rest();
}

}
`
Java组合可以算作一种多继承方法,但相较于C++的多继承,其耦合度要更低
而且,组合允许通过定义方法来更换组件(另一优势?),如

`
// 组合
// 电脑:内存,CPU
// 良好的封装:创建对象的过程 放在了组合类的构造器里;即在组合类的构造器里 通过 调用旧类的构造器 来初始化组合类
class Memories {
private String size;

public Memories(String size) {this.size = size;
}public void store(){System.out.println(size+"存储器正在存储数据——");
}

}
class CPU {
private String speed;

public CPU(String speed) {this.speed = speed;
}public void run(){System.out.println(speed+"CPU正在平稳运行!");
}

}
class Computer {
// 持有对象组件
private CPU cpu;
private Memories m;

public Computer(String size, String speed) {// 创建对象组件this.cpu = new CPU(speed);this.m = new Memories(size);
}
public void start() {System.out.println("开机中。。。");cpu.run();// Person类将作为一个属性,其属性√,方法√都可以依此调用m.store();System.out.println("开机成功!");
}
// 在方法里更换组件?道理很简单。对于对象c来说,经历初始化(第一次构造器赋值),对象m和cpu被创建,
// 之后调用方法更新c的属性(这里是创建新m对象)
public void change(String size) {this.m = new Memories(size);System.out.println("...内存条更换成功!");
}

}
public class Demo3_inherit_3 {
public static void main(String[] args) {
Computer pc = new Computer("512GB","咻——!");
pc.start();

    pc.change("1TB");pc.start();
}

}
`
对现实进行建模。"is-a"建议继承,"has-a"建议组合.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1170356.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java毕设项目推荐-基于Springboot+Vue的在线招聘平台设计与实现基于SpringBoot+Vue的中青年人员招聘平台【附源码+文档,调试定制服务】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

全网最全本科生必用TOP8AI论文写作软件测评

全网最全本科生必用TOP8AI论文写作软件测评 2026年本科生论文写作工具测评:为什么你需要这份指南 随着AI技术的不断进步,越来越多的本科生开始依赖AI论文写作软件来提升写作效率、优化内容结构并确保格式规范。然而,面对市场上琳琅满目的工具…

Java毕设项目推荐-基于SpringBoot和Vue的电影售票管理系统设计与实现基于SpringBoot+Vue的影视购票平台的设计与实现【附源码+文档,调试定制服务】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

【毕业设计】基于SpringBoot+vue的高校学生实习综合服务平台设计与实现(源码+文档+远程调试,全bao定制等)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

3D打印原理解析

3D打印原理解析3D打印,又称增材制造,是一种通过逐层堆积材料来构建三维物体的技术。它与传统减材制造(如切割、雕刻)相反,是一种自下而上、逐层累积的制造方式。 下面我将从核心原理、工作流程、主要技术类型以及特点与…

【计算机毕业设计案例】基于SpringBoot+Vue的中青年人员就业招聘平台(程序+文档+讲解+定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

Java毕设选题推荐:基于java的高校学生综合服务平台基于SpringBoot+vue的高校学生实习综合服务平台设计与实现【附源码、mysql、文档、调试+代码讲解+全bao等】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

【计算机毕业设计案例】基于SpringBoot和Vue电影购票管理系统的设计与实现基于SpringBoot+Vue的影视购票平台的设计与实现(程序+文档+讲解+定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

昇腾服务器大模型量化方法

昇腾服务器大模型量化方法 本文介绍如何使用量化工具在昇腾服务器上做量化,量化工具使用msModelSlim,推理框架使用MindIE,昇腾卡为Atlas300I Duo卡,以量化多模型模型Qwen2.5-VL-7B-Instruct为例。 准备mindie镜像 镜像版本&#x…

【计算机毕业设计案例】基于SpringBoot+vue的山区特色农产品供销服务系统的设计与实现(程序+文档+讲解+定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

时序数据库选型指南:Apache IoTDB为何成大数据场景优选

前言 在万物互联与数字化转型的浪潮下,工业传感器、车联网终端、智慧能源设备等每秒产生海量时序数据,其“写多读少、只增不删、规模庞大、查询复杂”的特性,对数据存储与管理系统提出了极致要求。传统关系型数据库早已难以承载,而…

搭建 FreeIPA 服务器

FreeIPA(Free Identity Policy and Audit)是 Linux/Unix 世界的 "Active Directory",一个开源的、一体化的身份管理与集中式策略控制解决方案。它旨在简化并统一在混合环境中管理 Linux 系统和用户的复杂…

后悔!孩子近视后,大部分家长都犯了这样的错

当孩子视力检查单上的度数不断攀升,许多家长陷入焦虑与慌乱,却在应对近视的过程中,不知不觉踏入误区,等到孩子近视度数快速加深时,才追悔莫及。误区一:配镜后便放松警惕,忽视近视进展的防控在发…

Java——异常

Error和Exception 什么是异常实际工作中遇到的情况不可能是非常完美的。比如:你写的某个模块,用户输入不一定符合你的要求、你的程序要求打开某个文件,这个文件可能不存在或者文件格式不对,你要读取数据库的数据,…

【计算机毕业设计案例】基于Java濒危物种公益网站的设计与实现基于SpringBoot濒危物种公益救助交流平台(程序+文档+讲解+定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

学习笔笔记——ARM 嵌入式系统与内核架构

ARM 嵌入式系统与内核架构详解一、计算机系统基本组成1.1 计算机硬件系统基本组成CPU(中央处理器):控制单元 运算单元 寄存器存储器系统:内存(主存):RAM、ROM外存:硬盘、闪存等输入…

Java计算机毕设之基于SpringBoot+vue的山区农户农产品供销服务系统的设计与实现(完整前后端代码+说明文档+LW,调试定制等)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

通信原理篇---AM/DSB/SSB/VSB解调

我们用“拆快递包裹”的比喻,来彻底讲清楚这四大经典模拟调制方式的解调方法。解调就是接收端如何从“卡车”(已调信号)里,完好地取出“礼物”(原始信号)的过程。核心思想:解调的两大门派所有解…

深入研究 Golang 下 Kafka 的集群搭建与配置

深入研究 Golang 下 Kafka 的集群搭建与配置 关键词:Kafka集群、Golang、Sarama、消息队列、分布式系统 摘要:本文从“如何用Golang玩转Kafka集群”的视角出发,结合生活场景类比与实战代码,详细讲解Kafka集群的核心概念、搭建步骤…

【数学趣题】二次方程的有理数根和共轭二次根式的处理

今天在上课时见识到了北京的神秘升学考试题,出得相当美丽,因此来记述一下。 \(\large\mathbf{P}\)\(\small\mathbf{ROBLEM\ 1}\) 计算:\(\displaystyle \dfrac{\displaystyle\sum^{99}_{i=1}\sqrt{10+\sqrt n}}{\di…