当前位置: 首页 > news >正文

Java组合

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.jsqmd.com/news/255044/

相关文章:

  • Java毕设项目推荐-基于Springboot+Vue的在线招聘平台设计与实现基于SpringBoot+Vue的中青年人员招聘平台【附源码+文档,调试定制服务】
  • 全网最全本科生必用TOP8AI论文写作软件测评
  • Java毕设项目推荐-基于SpringBoot和Vue的电影售票管理系统设计与实现基于SpringBoot+Vue的影视购票平台的设计与实现【附源码+文档,调试定制服务】
  • 【毕业设计】基于SpringBoot+vue的高校学生实习综合服务平台设计与实现(源码+文档+远程调试,全bao定制等)
  • 3D打印原理解析
  • 【计算机毕业设计案例】基于SpringBoot+Vue的中青年人员就业招聘平台(程序+文档+讲解+定制)
  • Java毕设选题推荐:基于java的高校学生综合服务平台基于SpringBoot+vue的高校学生实习综合服务平台设计与实现【附源码、mysql、文档、调试+代码讲解+全bao等】
  • 【计算机毕业设计案例】基于SpringBoot和Vue电影购票管理系统的设计与实现基于SpringBoot+Vue的影视购票平台的设计与实现(程序+文档+讲解+定制)
  • 昇腾服务器大模型量化方法
  • 【计算机毕业设计案例】基于SpringBoot+vue的山区特色农产品供销服务系统的设计与实现(程序+文档+讲解+定制)
  • 时序数据库选型指南:Apache IoTDB为何成大数据场景优选
  • 后悔!孩子近视后,大部分家长都犯了这样的错
  • 搭建 FreeIPA 服务器
  • Java——异常
  • 【计算机毕业设计案例】基于Java濒危物种公益网站的设计与实现基于SpringBoot濒危物种公益救助交流平台(程序+文档+讲解+定制)
  • 学习笔笔记——ARM 嵌入式系统与内核架构
  • Java计算机毕设之基于SpringBoot+vue的山区农户农产品供销服务系统的设计与实现(完整前后端代码+说明文档+LW,调试定制等)
  • 通信原理篇---AM/DSB/SSB/VSB解调
  • 深入研究 Golang 下 Kafka 的集群搭建与配置
  • Java毕设项目:基于SpringBoot+vue的山区农产品供销服务系统的设计与实现(源码+文档,讲解、调试运行,定制等)
  • 【数学趣题】二次方程的有理数根和共轭二次根式的处理
  • 【课程设计/毕业设计】基于SpringBoot + Vue的影院线上购票管理平台基于SpringBoot+Vue的影视购票平台的设计与实现【附源码、数据库、万字文档】
  • 【课程设计/毕业设计】基于SpringBoot + Vue的影院线上购票管理平台基于SpringBoot+Vue的影视购票平台的设计与实现【附源码、数据库、万字文档】
  • 把祝福写成一首歌:10 个「Song」主题网站,送给生命里最重要的人
  • 【课程设计/毕业设计】基于SpringBoot+vue的山区农产品产销山区农产品供销服务系统的设计与实现【附源码、数据库、万字文档】
  • 【课程设计/毕业设计】基于SpringBoot+vue的山区农产品产销山区农产品供销服务系统的设计与实现【附源码、数据库、万字文档】
  • AI长期记忆存储方案对比:哪种最适合你的应用
  • 【多线程编程】CompletableFuture 使用指南(基础篇):从原理到 API
  • 【毕业设计】基于SpringBoot+vue的山区农产品供销服务系统的设计与实现(源码+文档+远程调试,全bao定制等)
  • 【Java多并发编程】CompletableFuture 使用指南(实战篇):从场景到优化