聚合
一:基本概念:
聚合是关联的一种属性,代表了两个对象之间的归属关系。即为一个类中有一个类的实体引用(类中的类)。
聚合的主要特点:
- 聚合表示HAS-A关系 例如:
class Hello{
int i;
Address World;
}
- 在这里Hello不仅包括自己的基本对象,还包括了另一个类对象world。Hello HAS-A World
- 聚合是一种单向关系。即Hello里面可以有World,但是World里面不能有Hello;
- 聚合的关系是地址关系
二:为什么要使用聚合
为了实现代码重用
具体实例:
public class Circle {
double radius;
public Circle(double radius) {
this.radius = radius;
}
double square(double radius) {
return radius*radius*3.14;
}
}
上面的代码创建了一个Circle类,来实现圆的面积计算
package helloworld;
public class aggregation {
Circle circle;
public aggregation(Circle circle) {
this.circle = circle;
}
void display() {
System.out.println("The circle square is "+circle.square(circle.radius));
}
public static void main(String[] args) {
Circle newCircle = new Circle(1);
aggregation sq = new aggregation(newCircle);
sq.display();
}
}
在这个代码块中可以看到,aggregation中创建了一个Circle类,通过在aggregation类里面的操作修改Circle类
得到的结果如下:
The circle square is 3.14
组合
一:基本概念
如果一个对象只归属于一个聚集对象,那么它和聚集对象之间的关系就成为组合。
组合是一种聚合的限制形式,使用组合关系的两个类相互依赖,并且有以下特征:
- 代表part-of关系,意思是一个类是另一个类的一部分
- 在组合的关系中,两个实例相互依赖,一个对象必须依赖另一个对象
- 组合是把该类当成另一个类的组合成分,从而允许新类直接复用该类的public方法。
- 聚合的关系是内容关系
二:具体实例
public class Animal {
public void name() {
System.out.print("我是");
}
}
Animal是一个类
public class Bird {
public Animal kind;
public Bird(Animal kind) {
this.kind = kind;
}
public void names() {
kind.name();
}
public void fly() {
System.out.println("鸟,在天空飞翔");
}
}
Bird是将Animal类组合到自己的类里面
package helloworld;
public class WhatAnimal {
public static void main(String[] args) {
// TODO Auto-generated method stub
Animal a = new Animal();
Bird b = new Bird(a);
b.names();
b.fly();
}
}
对上面两类的使用调用得到下面的结果:
我是鸟,在天空飞翔
聚合与组合的区别
聚合:聚合就是一种类包括一种类,但是如果没了这个类原来的类也是可以使用的
组合:组合就是一种类和一种类是相互依赖联系的,如果一个类不能使用,那么类就没有存在的意义。