组合是一种关联类型,用于表示两个对象之间的“PART-OF”关系。 java中的组合是另一种关联聚合的受限形式,其中“Has-a”关系中的两个实体有自己的存在并且彼此不依赖。在组合中,一个实体包含在其他实体中,不能单独存在。与用于表示 is-a 关系的继承不同。
例如有两个类Car和Engine,Car是由一个引擎对象组成的,没有Car就不存在引擎实体。
开始您的免费软件开发课程
网络开发、编程语言、软件测试及其他
语法:
class C1{ // A class represents the dependent entity } class C2{ //This class represents the entity that contains the dependent entity by declaring the object of the above class as one of its member variables. private C1 a; }
使用上述语法,我们能够在上述两个实体之间建立“isPart-Of”关系,其中 C1 依赖于另一个实体的存在。另外,可以说明依赖对象的存在是可选的。
为什么我们需要 Java 组合?
当使用继承来表示 2 个实体时,我们可以看到,只能存在 IS-A 关系。但如果两个实体之间包含有关系,则需要聚合。聚合有 2 种不同类型:
1。协会
这用于表示两个实体以 HAS-A 关系存在,但其中一个实体的存在不依赖于其他实体的关系。而且,它是一种单向类型的关联。例如,银行和员工是两个实体,其中银行的单个实体可以与多个员工相关;因此,银行与员工之间存在一对多关系,但反之亦然。
2。成分
这是当两个实体之一在另一个容器实体中组成时使用的限制性关联类型。如果没有容器对象,组合实体就无法存在。但可以有一个空的组合实体。因此它被用来表示双向的PART-OF关系;因此,两个实体相互依赖。
组合在 Java 中如何工作?
由于组合用于实现两个实体之间的 PART-OF 类型关系,因此一个实体被称为容器,另一个实体被称为组合实体。 组合实体就像一个完整的容器对象,有自己的属性和操作,从而为它制作一个单独的实体。这也有助于代码重用,因为此类可以作为组合实体在其他容器类中使用。例如,Engine 是一个组合类,Car、TwooWheeler 等可以是它的容器类。
由于组合类是容器实体的一部分,因此两者相互依赖。但是,组合类仍然可以为空,比如汽车不需要强制具有引擎。这样,组合类就完全依赖于容器类的存在。另外,由于组合是类型关联,因此 PART-OF 关系也被称为 HAS-A 关系的子类。这样,组合有助于在不使用继承的情况下实现两个相互依赖的实体之间的关系。
用 Java 实现组合的示例
考虑由不同列表(例如办公桌、会议室)组成的办公室的情况。桌面对象进一步由电话对象组成,因为每张桌子都有一部桌面电话。
电话.Java
代码:
package Try; public class Phone { private String Model; private String contactNum; Phone (String model, String num){ this.Model=model; this.contactNum=num; } public void getPhoneDetails(){ System.out.println("Phone Model "+ this.Model); System.out.println("Desk Number " + this.contactNum); } }
Desk.Java
代码:
package Try; public class Desk { private String id; private String Mid; private Phone deskNum; private String personName; Desk(String id,String mid,Phone contact,String name){ this.id=id; this.Mid = mid; this.deskNum=contact; this.personName=name; } public void getDeskDetails(){ System.out.println("Desk Details :-"); System.out.println("Id " + this.id); System.out.println("Machine ID "+ this.Mid); System.out.println("Allocated To " + this.personName); this.deskNum.getPhoneDetails(); } }
会议室.Java
代码:
package Try; public class MeetingRoom { private String name; private Phone contact; private String location; private int numChairs; private int numTables; MeetingRoom(String name,Phone contact,String location,int nChairs, int nTables){ this.name=name; this.contact=contact; this.location=location; this.numChairs=nChairs; this.numTables=nTables; } public void getMeetingRoomDetails(){ System.out.println("Meeting Room Details :-"); System.out.println("Name " +this.name); System.out.println("Location "+ this.location); System.out.println("Number OF Chairs " + this.numChairs); System.out.println("Number OF Tables "+this.numTables); contact.getPhoneDetails(); } }
Office.java
代码:
package Try; import java.util.List; public class Office { private String offcName; private List<desk> deskList; private List<meetingroom> roomList; private int pantryNum; public Office(String name , List<desk> dList, List<meetingroom> mList,int pnum){ this.offcName = name; this.deskList = dList; this.roomList = mList; this.pantryNum =pnum; } public void getDetails(){ System.out.println("Below are details of "+ offcName +"Office"); for(Desk a:deskList){ a.getDeskDetails(); } for(MeetingRoom m:roomList){ m.getMeetingRoomDetails(); } System.out.println("Number Of pantry " + pantryNum ); } }</meetingroom></desk></meetingroom></desk>
演示.Java
代码:
package Try; import java.awt.*; import java.awt.event.*; import java.awt.geom.*; import java.util.ArrayList; import java.util.List; public class Demo extends Frame { public static void main(String[] args){ List<desk> dList =new ArrayList<desk>(); List<meetingroom> mList =new ArrayList<meetingroom>(); Phone p1=new Phone("NOTOROLA","12346"); Phone p2=new Phone("NOTOROLA","35235"); Phone p3=new Phone("BSNL","23233"); Phone p4=new Phone("BSNL","123346"); Desk d1 =new Desk("S121","M12",p1,"Tom"); Desk d2 =new Desk("S122","M14",p2,"Pam"); dList.add(d1); dList.add(d2); MeetingRoom m1=new MeetingRoom("Kurukshetra",p3,"Floor_10",10, 2); MeetingRoom m2=new MeetingRoom("Karnal",p4,"Floor_9",20, 3); mList.add(m1); mList.add(m2); Office o1= new Office("Banglore" , dList, mList,20); o1.getDetails(); } }</meetingroom></meetingroom></desk></desk>
输出:
说明: 在上面的程序中,Office 对象由 Desks 和 Meeting Room 实体列表组成,其中 Desk 和 Meeting room 又由 Phone 实体组成。在这里,电话始终与办公桌或会议室对象相关,因此不存在。此外,会议室和办公桌还依赖于 Office 对象。这里的 Single Phone 类可以用作办公桌和会议室中的组合实体,从而有助于实现代码的可重用性。
结论
它是一种限制性聚合类型,用于实现具有双向关系的两个实体之间的 PART-OF 关系,并且具有在没有容器实体的情况下不存在的组合实体。这是有益的,因为在组合类中所做的任何更改都不会影响其余代码和代码重用。
以上是Java 中的组合的详细内容。更多信息请关注PHP中文网其他相关文章!

本文讨论了使用Maven和Gradle进行Java项目管理,构建自动化和依赖性解决方案,以比较其方法和优化策略。

本文使用Maven和Gradle之类的工具讨论了具有适当的版本控制和依赖关系管理的自定义Java库(JAR文件)的创建和使用。

本文讨论了使用咖啡因和Guava缓存在Java中实施多层缓存以提高应用程序性能。它涵盖设置,集成和绩效优势,以及配置和驱逐政策管理最佳PRA

本文讨论了使用JPA进行对象相关映射,并具有高级功能,例如缓存和懒惰加载。它涵盖了设置,实体映射和优化性能的最佳实践,同时突出潜在的陷阱。[159个字符]

Java的类上载涉及使用带有引导,扩展程序和应用程序类负载器的分层系统加载,链接和初始化类。父代授权模型确保首先加载核心类别,从而影响自定义类LOA


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

ZendStudio 13.5.1 Mac
功能强大的PHP集成开发环境

Atom编辑器mac版下载
最流行的的开源编辑器

PhpStorm Mac 版本
最新(2018.2.1 )专业的PHP集成开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)