组合对象
要将多个元素作为一个对象来处理,您需要将它们组合。例如,创建了一幅绘画后(如树或花),可以将该绘画的元素合成一组,这样就可以将该绘画当成一个整体来选择和移动。
组合对象
要将多个元素作为一个对象来处理,您需要将它们组合。例如,创建了一幅绘画后(如树或花),可以将该绘画的元素合成一组,这样就可以将该绘画当成一个整体来选择和移动。
一个含有其他类对象的类称为组合类,组合类的对象称为组合对象。
对象的组合
一个类可以把对象作为自己的成员变量,如果用这样的类创建对象,那么该对象中就会有其它对象,也就是说该对象将其他对象作为自己的组成部分(这就是人们常说的Contains-A),或者说该对象是由几个对象组合而成。
举例
/*** 定义矩形类* @author 郎行天下*/class Rectangle {// 成员变量private double x, y, height, width;// 构造方法Rectangle() {}// 取得左顶点的横坐标public double getX() {return x;}// 设置左顶点的横坐标public void setX(double x) {this.x = x;}// 取得左顶点的纵坐标public double getY() {return y;}// 设置左顶点的纵坐标public void setY(double y) {this.y = y;}// 取得矩形的长度public double getHeight() {return height;}// 设置矩形的长度public void setHeight(double height) {this.height = height;}// 取得矩形的宽度public double getWidth() {return width;}// 设置矩形的宽度public void setWidth(double width) {this.width = width;}}
/*** 定义圆类* @author 郎行天下*/class Circle {// 成员变量private double x, y, radius;// 构造方法Circle() {}// 取得圆心的横坐标public double getX() {return x;}// 设置圆心的横坐标public void setX(double x) {this.x = x;}// 取得圆心的纵坐标public double getY() {return y;}// 设置圆心的纵坐标public void setY(double y) {this.y = y;}// 取得圆的半径public double getRadius() {return radius;}// 设置圆的半径public void setRadius(double radius) {this.radius = radius;}}
/*** 定义组合类* @author 郎行天下*/class Geometry {// 成员变量private Rectangle rect; //定义一个Rectangle类的对象作为自己的成员变量private Circle circle; //定义一个Circle类的对象作为自己的成员变量// 构造方法Geometry(Rectangle rect, Circle circle) {this.rect = rect;this.circle = circle;}// 设置矩形的左上角顶点坐标public void setRectPosition(double x, double y) {rect.setX(x);rect.setY(y);}// 设置矩形的长和宽public void setRectHeightAndWidth(double height, double width) {rect.setHeight(height);rect.setWidth(width);}// 设置圆的圆心坐标public void setCirclePosition(double x, double y) {circle.setX(x);circle.setY(y);}// 设置圆的半径public void setCircleRadius(double radius) {circle.setRadius(radius);}// 显示矩形与圆的位置关系public void showPosition(Rectangle rect, Circle circle) {if (rect.getX() - circle.getX() >= circle.getRadius()) {System.out.println("矩形再圆的右边");}if (circle.getX() - rect.getX() >= rect.getWidth()) {System.out.println("圆在矩形的右边");}}}
/*** 测试主类* @author 郎行天下*/public class MainTest {public static void main(String[] args) {Rectangle myRect = new Rectangle();Circle myCircle = new Circle();Geometry myGeometry = new Geometry(myRect, myCircle);// 设置矩形的左上角顶点坐标myGeometry.setRectPosition(30, 40);// 设置矩形的长和宽myGeometry.setRectHeightAndWidth(120, 80);// 设置圆心坐标myGeometry.setCirclePosition(150, 30);// 设置圆半径myGeometry.setCircleRadius(60);myGeometry.showPosition(myRect, myCircle);}}