java组合和聚合的区别和联系 同时与数据上集合的包含关系之间的联系

包含是集合与集合之间的关系,也叫子集关系。基本含义近同于蕴含、蕴涵、包涵,关系形容词。

元素和集合之间的包含叫元素属于集合

例A={1,2},B={1,2,3}

则1∈A,2∈A,3∈B

属于是元素和集合之间的关系,例如,元素a属于集合A,记为a∈A

属于符号:∈,用于元素与集合之间

集合与集合之间的包含才叫包含

如果集合A的任意一个元素都是集合B的元素,那么集合A叫做集合B的子集,记作A包含于B或B包含A

空集被任一一个集合所包含,就是任何集合的子集

如果集合A的元素是集合B的子集,并且B中至少有一个元素不属于A,那么集合A叫做集合B的真子集,记作A真包含于B或B真包含A。

组合和聚合是有很大区别的,这个区别不是在形式上,而是在本质上:

比如A类中包含B类的一个引用b,当A类的一个对象消亡时,b这个引用所指向的对象也同时消亡(没有任何一个引用指向它,成了垃圾对象),这种情况叫做组合,反之b所指向的对象还会有另外的引用指向它,这种情况叫聚合。

现实生活中:

人和手,脚是组合关系,因为当人死亡后人的手也就不复存在了。人和他的电脑是聚合关系。

  1. class Hand{
  2. }
  3. class Computer{
  4. }
  5. 组合:
  6. class Person{
  7. private Hand hand;
  8. public Person(){
  9. hand = new Hand();
  10. }
  11. }
  12. 聚合:
  13. class Person{
  14. private Computer computer;
  15. public setComputer(){
  16. computer = new Computer();
  17. }
  18. }

可以说聚合是一种强组合的关系

组合与聚合的区别和联系:

首先,都是整体与部分的关系,组合的关系更强一点,对组合关系来说,如果失去部分,整体也将不存在了。

代码实现上来看:

组合:在整体的构造器中实例化部分,这个部分不能被其他实例共享。整体与部分的生命周期是同步的。而聚合关系的部分,可以在构造器中通过参数传递的形式进行初始化。

从数据库的层面上看:     组合关系:需要级联删除,而聚合关系不需要。

看完了这些关系我们就可以大致理解力其实java中的组合关系就是数学上集合的包含关系

组合与包含两个含义还是有很大的相似性

用包含我们就很容易理解一些程序中的语句如:

A a=new A();

B b=new B(a);

C c=new C(b);

这三段代码中C包含了B,B包含了A

如果用数学式子来表示就是

a属于b,b属于c

这样就很容易理解这三句话的真正含义了:

就是a中的所有功能和属性B都有B可以直接使用

b中的所有功能和属性c都有c可以直接使用

这里就像是c是人 b是手 c是手指 一个包含一个

这样一层一层的组合关系用数据是挺好理解的数学博大精深啊

时间: 2024-08-29 00:37:45

java组合和聚合的区别和联系 同时与数据上集合的包含关系之间的联系的相关文章

java.lang.ClassNotFoundException与java.lang.NoClassDefFoundError的区别

java.lang.ClassNotFoundException与java.lang.NoClassDefFoundError的区别 以前一直没有注意过这个问题,前两天机缘巧合上网查了一下,然后自己测试验证了一下.虽然网上说法很多,但是关于NoClassDefFoundError并没有给出一个样例,所以一直无法理解,索性自己验证了一下,收获还不少. ClassNotFoundException ClassNotFoundException这个错误,比较常见也好理解. 原因:就是找不到指定的cla

原码,反码,补码详解及 Java中>>和>>>的区别

前两天分析 HashMap 的 hash 算法的时候,遇见了 >> 和 >>> 这两个符号,当时查了下资料,在脑子中过了一下.今天又碰到了,没想到竟然忘了  0-0........ 我这记忆力哎,不说了.只好做个笔记,提醒自己,遇到啥不会的最好记下来,好记性不如烂博客啊~ 既然涉及到位运算,我们追本索源,就先从最基础的原码,补码和反码学起.搜了一下这方面的资料,发现一篇专门介绍这方面的文章,写的很是透彻,便直接引用过来了,原文地址是:http://www.cnblogs.co

java 和javaw 的区别——<转>

java 和javaw 的区别 javaw.exe用法和java.exe 相同 javaw的程序不在java console 上面显示任何东西,如果在开发程序,就用java,这样可以看到错误提示, 如果是运行完成了的程序,就用javaw, 可以提高一点速度 两个应用程序都能运行你的程序,并非常相似,但是有一个重要的区别,java通过控制台运行,javaw则不是. 控制台几乎是为纯文本编成的,例如如果你用javaw运行所有你打印的状态不会被打印出来.你打印在程序中的有用 信息,错误信息也是一样.

Java:集合类的区别详解

Java中集合类的区别 Array是数组,不在集合框架范畴之内,一旦选定了,它的容量大小就不能改变了,所以通常在编程中不选用数组来存放. 集合 : 集合对象:用于管理其他若干对象的对象 数组:长度不可变 List: 有顺序的,元素可以重复 遍历:for .迭代 排序:Comparable Comparator Collections.sort() ArrayList:底层用数组实现的List 特点:查询效率高,增删效率低 轻量级 线程不安全 LinkedList:底层用双向循环链表 实现的Lis

java,jsp,javascript的区别

在我回答你问题之前请允许我对Java语言作一个简单的介绍,你不了解这些很难和你说明白你的问题Java是一种面向对象独立于平台的安全的计算机语言,你也可以认为它是一个平台这种语言针对应用领域不同,共分为三个版本JavaSE Java平台标准版 其属于Java基础部分,用JavaSE可以开发C/S架构的桌面式应用程序JavaME Java平台迷你版 用于为嵌入式设备开发应用程序,如手机或掌上电脑的软件.游戏之类的JavaEE Java企业开发版本 用于企业级软件的开发,用JavaEE可以开发大型的B

Java ArrayList 和 LinkedList区别

ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构. 1.对ArrayList和LinkedList而言,在列表末尾增加一个元素所花的开销都是固定的.对ArrayList而言,主要是在内部数组中增加一项,指向所添加的元素,偶尔可能会导致对数组重新进行分配:而对LinkedList而言,这个开销是统一的,分配一个内部Entry对象. 2.在ArrayList的中间插入或删除一个元素意味着这个列表中剩余的元素都会被移动:而在LinkedList的中间插入或删除一

Java JDK 版本的区别

jdk6和jdk5相比的新特性有: 1.instrumentation 在 Java SE 6 里面,instrumentation 包被赋予了更强大的功能:启动后的 instrument.本地代码 instrument,以及动态改变 classpath 等等. 2.Http有所增强 3. Java 管理扩展(JMX) 架构及其框架,以及在 Java SE 5 中新引入的 JMX API -- java.lang.management 包 4.JDK 6 中新增加编译器 API(JSR 199)

Java与.net的区别delegate和event

There is no delegate concept in Java The right-side C# program may be mimiced with reflection technology. 在Java中没有delegate的概念,而C#中delegate使用的是类似Java中反射的工具. import java.lang.reflect.*; import java.io.*; public class Test { public static void main(Stri

java与javax的区别分析(转)

Java是一种受C语言影响的编程语言.Java和Javax本质上是与Java编程语言的上下文一起使用的包.实际上Java和Javax没有区别.这只是不同的名字. Java是一种编程语言,受到C语言的影响.它源自C和C++的大部分语法,但是它的低级别设施比其中任何一个都要少.Java是一种通用编程语言,旨在与以前的语言相比具有较少的实现依赖性.它是并发的,基于类的,面向对象的语言. Java由Sun Microsystems的James Gosling开发,并于1995年发布.它最初作为Sun M