组合和聚合是有很大区别的,这个区别不是在形式上,而是在本质上:
比如A类中包含B类的一个引用b,当A类的一个对象消亡时,b这个引用所指向的对象也同时消亡(没有任何一个引用指向它,成了垃圾对象),这种情况叫做组合,反之b所指向的对象还会有另外的引用指向它,这种情况叫聚合。

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

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

class Hand{

}
class Computer{ }
组合:
class Person{
private Hand hand;
public Person(){//在类的构造函数中初始化组合
hand = new Hand();
}
}
聚合:
class Person{
private Computer computer;
public setComputer(){//单独的初始化聚合
computer = new Computer();
}
}

  

组合与聚合的区别和联系: 
     首先,都是整体与部分的关系,组合的关系更强一点,对组合关系来说,如果失去部分,整体也将不存在了。 
代码实现上来看: 
     组合:在整体的构造器中实例化部分,这个部分不能被其他实例共享。整体与部分的生命周期是同步的。而聚合关系的部分,可以在构造器中通过参数传递的形式进行初始化。
从数据库的层面上看:     组合关系:需要级联删除,而聚合关系不需要。

Java中的组合与聚合的更多相关文章

  1. UML中的组合、聚合、关联、继承、实现、依赖

    转自:http://justsee.iteye.com/blog/808799 UML定义的关系主要有六种:依赖.类属.关联.实现.聚合和组合. 继承 指的是一个类(称为子类.子接口)继承另外的一个类 ...

  2. OOP 中的 组合、聚合和关联有什么区别?

    如果两个对象彼此有关系,就说他们是彼此相关联的.组合和聚合是面向对象中 的两种形式的关联.组合是一种比聚合更强力的关联.组合中,一个对象是另一 个的拥有者,而聚合则是指一个对象使用另一个对象.如果对象 ...

  3. 深入理解Java中的逃逸分析

    在Java的编译体系中,一个Java的源代码文件变成计算机可执行的机器指令的过程中,需要经过两段编译,第一段是把.java文件转换成.class文件.第二段编译是把.class转换成机器指令的过程. ...

  4. UML中常见关系详解(泛化、实现、依赖、关联、组合、聚合)

    UML中类与类,已经类与接口,接口与接口的关系有:泛化(generalization),关联(association),依赖(dependency),实现(realization)这几种.   泛化( ...

  5. java is-a、has-a和like-a、组合、聚合和继承 两组概念的区别

    is a 代表的是类之间的继承关系,比如PC机是计算机,工作站也是计算机.PC机和工作站是两种不同类型的计算机,但都继承了计算机的共同特性.因此在用 Java语言实现时,应该将PC机和工作站定义成两种 ...

  6. 又一次认识java(四) — 组合、聚合与继承的爱恨情仇

    有人学了继承,认为他是面向对象特点之中的一个,就在全部能用到继承的地方使用继承,而不考虑到底该不该使用,无疑.这是错误的.那么.到底该怎样使用继承呢? java中类与类之间的关系 大部分的刚開始学习的 ...

  7. 7、java封装、继承、聚合组合

    1封装:封装的是属性,封:private 装:set.get‘ 可以看做将属性和get/set方法捆绑的过程. 优点:1.防止对封装数据的未经授权的访问,提高安全性.使用者只能通过事先预定好的方法来访 ...

  8. 关于Java中的继承和组合的一个错误使用的例子

    [TOC] 关于Java中的继承和组合的一个错误使用的例子 相信绝大多数人都比较熟悉Java中的「继承」和「组合」这两个东西,本篇文章就主要就这两个话题谈论一下.如果我某些地方写的不对,或者比较幼稚, ...

  9. <Java中的继承和组合之间的联系和区别>

    //Java中的继承和组合之间的联系和区别 //本例是继承 class Animal { private void beat() { System.out.println("心胀跳动...& ...

随机推荐

  1. 【BZOJ2588】Spoj 10628. Count on a tree 主席树+LCA

    [BZOJ2588]Spoj 10628. Count on a tree Description 给定一棵N个节点的树,每个点有一个权值,对于M个询问(u,v,k),你需要回答u xor lasta ...

  2. c# Sockect 通信

    1.Server using System; using System.Collections.Generic; using System.Text; //添加Socket类 using System ...

  3. UPDATE从左向右,变量优先,逐行更新.顺序执行的,可以交换两列之间的值

    CREATE TABLE tab_update (id TINYINT,n1 NVARCHAR(30),v1 NVARCHAR(30),s1 NVARCHAR(30)) INSERT INTO tab ...

  4. ST-LINK使用注意

    利用ST-LINK下载程序注意事项: 1.接线 按照上面图对着自己的开发板连接相应的引脚就可以了. 2.keil5配置 线连接完之后,要对自己的工程进行相关的 配置才能正确进行下载. 首先选择ST-L ...

  5. Centos6.8 防火墙设置

    1.指令 vi /etc/sysconfig/iptables 添加以下内容和要开放的端口 # Firewall configuration written by system-config-fire ...

  6. Docker容器之Nginx

    一,pull一个Nginx镜像 docker pull nginx 二,Nginx镜像文件说明 配置文件 /etc/nginx/nginx.conf 网站根目录 /usr/share/nginx/ht ...

  7. Nginx配置ssl安全证书

    server { listen 443; server_name www.loaclhost.com; ssl on; root /web; ssl_certificate /data/ssl/xxx ...

  8. codeforces#505--B Weakened Common Divisor

    B. Weakened Common Divisor time limit per test 1.5 seconds memory limit per test 256 megabytes input ...

  9. Python默认调用路径

    记录个遇到的小问题,防止下次遇到忘记怎么解. 起因:pip安装扩展库时提示安装完成,但是在Python 终端下无法import 现象:终端直接运行python 时提示如下:(2.7.13)然而用/us ...

  10. ConcurrentHashMap实现解析

    ConcurrentHashMap是线程安全的HashMap的实现,具有更加高效的并发性.与HashTable不同,ConcurrentHashMap运用锁分离技术,尽量减小写操作时加锁的粒度,即在写 ...