类与类之间的关系
类与类之间的关系有三种:
A is- a B 泛化 (继承 实现)
A has-a B 包含 (组合 聚合 关联)
A use-a B 依赖 (依赖)
包含
包含关系表现形式为:一个类的对象当作另一个类的属性。
包含又分为:组合,聚合,关联。它们都属于整体和部分的关系,但是有以下区别:
组合 | 聚合 | 关联 |
---|---|---|
不可分割,要出现都出现,要消亡都消亡 | 创建时有可能是分开的 | 可以分割 |
举个栗子:
定义两个类,一个Car类,一个Wheel类,两个类为包含关系。
Class Car代码如下:
public class Car {
// 属性
public String brand;
public String type;
public String color;
public Wheel wheel;
// 方法
public Car() {
super();
// TODO Auto-generated constructor stub
}
public Car(String brand, String type, String color, Wheel wheel) {
super();
this.brand = brand;
this.type = type;
this.color = color;
this.wheel = wheel;
}
public void showCar() {
System.out.println("这是一辆" + this.brand + "牌" + this.type + "型号" + this.color + "的小汽车");
System.out.println("车上搭载着" + wheel.brand + "牌的" + wheel.size + "尺寸" + wheel.color + "颜色的车轮子");
wheel.turn();// 方法调用
}
Class Wheel代码如下:
public class Wheel {
// 属性
public String brand;
public int size;
public String color;
// 方法
public Wheel() {
super();
// TODO Auto-generated constructor stub
}
public Wheel(String brand, int size, String color) {
super();
this.brand = brand;
this.size = size;
this.color = color;
}
public void turn() {
System.out.println("车轮子可以旋转");
}
}
此时Wheel类被Car类座位属性使用,这就实现了类与类包含的关系。
我们测试一下:
import com.excample.pojo.Car;
import com.excample.pojo.Wheel;
public class CarTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
Car car = new Car("BMW", "Z4", "宝石蓝", new Wheel("米其林", 400, "酷黑"));
car.showCar();
}
}
输出结果为:
这是一辆BMW牌Z4型号宝石蓝的小汽车
车上搭载着米其林牌的400尺寸酷黑颜色的车轮子
车轮子可以旋转