組合對象

要將多個元素作為一個對象來處理,您需要將它們組合。例如,創建了一幅繪畫後(如樹或花),可以將該繪畫的元素合成一組,這樣就可以將該繪畫當成一個整體來選擇和移動。

組合對象,舉例,

組合對象

要將多個元素作為一個對象來處理,您需要將它們組合。例如,創建了一幅繪畫後(如樹或花),可以將該繪畫的元素合成一組,這樣就可以將該繪畫當成一個整體來選擇和移動。
一個含有其他類對象的類稱為組合類,組合類的對象稱為組合對象。
對象的組合
一個類可以把對象作為自己的成員變數,如果用這樣的類創建對象,那么該對象中就會有其它對象,也就是說該對象將其他對象作為自己的組成部分(這就是人們常說的Has-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);
}
}

相關詞條

熱門詞條

聯絡我們