零度非安全 发表于 2017-4-7 11:08:15

【Java 教程(原创)】026.对象的组合

本帖最后由 零度非安全 于 2017-4-7 11:09 编辑

点击图片穿越到 索引帖,听说有惊喜!



一个类的成员变量可以是 Java 允许的任何数据类型,因此,一个类可以把对象作为自已的成员变量。如果用这样的类创建

对象,那么该对象中就会有其他对象,也就是说,该对象将其他对象作为自已的组成部分(这就是人们常说的 Has-A,例

如,在下面的例子中的圆锥对象就将一个圆对象作为自已的成员,即圆锥有一个圆底),或者说,该对象由几个对象组合而

成,如下所示:



我在下面的例子中一共写了 4 个类,分成 4 个源文件,即 Rectangle.java、Circle.java、Geometry.java 和 Main.java,

需要将这 4 个源文件分别编辑,并保存在相同的目录中,例如 D:\FishC_Java\026。

相关代码如下:

Rectangle.java
public class Rectangle{
   
    double x,y,width,height;
   
    public void setX(double a){
      x = a;
    }
   
    public double getX(){
      return x;
    }
   
    public void setY(double b){
      y = b;
    }
   
    public double getY(){
      return y;
    }
   
    public void setWidth(double w){
      if(w > 0){
            width = w;
      }
    }
   
    public double getWidth(){
      return width;
    }
   
    public void setHeight(double h){
      if(height > 0){
            height = h;
      }
    }
   
    public double getHeight(){
      return height;
    }
   
}
Circle.java
public class Circle{
   
    double x,y,radius;
   
    public void setX(double a){
      x = a;
    }
   
    public double getX(){
      return x;
    }
   
    public void setY(double b){
      y = b;
    }
   
    public double getY(){
      return y;
    }
   
    public void setRadius(double r){
      if(r > 0){
            radius = r;
      }
    }
   
    public double getRadius(){
      return radius;
    }
   
}
Geometry.java
public class Geometry{
   
    Rectangle rect;
    Circle circle;
   
    Geometry(Rectangle rect,Circle circle){
      this.rect = rect;
      this.circle = circle;
    }
   
    public void setCirclePosition(double x,double y){
      circle.setX(x);
      circle.setY(y);
    }
   
    public void setCircleRadius(double radius){
      circle.setRadius(radius);
    }
   
    public void setRectanglePosition(double x,double y){
      rect.setX(x);
      rect.setY(y);
    }
   
    public void setRectangleWidthAndHeight(double w,double h){
      rect.setWidth(w);
      rect.setHeight(h);
    }
   
    public void showState(){
      double circleX = circle.getX();
      double rectX = rect.getX();
      if(rectX - rect.getWidth() >= circleX + circle.getRadius()){
            System.out.println("矩形在圆的右侧");
      }
      if(rectX + rect.getWidth() <= circleX - circle.getRadius()){
            System.out.println("矩形在圆的左侧");
      }
    }
   
}
Main.java
public class Main{
   
    public static void main(String[] args){
      Rectangle rect = new Rectangle();
      Circle circle = new Circle();
      Geometry geometry;
      geometry = new Geometry(rect,circle);
      geometry.setRectanglePosition(30,40);
      geometry.setRectangleWidthAndHeight(120,80);
      geometry.setCirclePosition(260,30);
      geometry.setCircleRadius(60);
      System.out.print("几何图形中圆和矩形的位置关系是:");
      geometry.showState();
      System.out.println("几何图形重新调整了圆的矩形的位置。");
      geometry.setRectanglePosition(220,160);
      geometry.setCirclePosition(40,30);
      System.out.print("调整后,几何图形中圆和矩形的位置关系是:");
      geometry.showState();
    }
   
}
关于以上代码的几点说明:

1. Rectangle.java 中的 Rectangle 类有 double 型的成员变量 x、y、widht、height,用来表示矩形左上角的位置坐标以

及矩形的宽和高。该类提供了修改 x、y、width、height 以及返回 x、y、width、height 的方法。

2. Circle.java 中的 Circle 类有 double 型的成员变量 x、y、radius,分别用来表示对象的圆心坐标和圆的半径。该类提供

了修改 x、y、radius 以及返回 x、y、radius 的方法。

3. Geometry.java 中的 Geometry 类有 Rectangle 类型和 Circle 类型的成员变量,名字分别为 rect 和 circle,也就是说,

Geometry 类创建的对象(几何图形)是由一个 Rectangle 对象和一个 Circle 对象组合而成。该类提供了修改 rect、circle

位置和大小的方法,并提供了显示 rect 和 circle 位置关系的方法。

4. Main.java 含有主类,主类在 main 方法中用 Geometry 类创建对象,该对象调用相应的方法设置其中圆的位置和半径

调用相应的方法设置其中矩形的位置以及宽和高。

运行效果如下:



【特别注意】贴子中的栗子希望鱼油们能自觉的手动敲上去,不要单纯的复制粘贴保存,然后编译运行。



☞点我前往上一讲☜


Ry丶落魄书生 发表于 2017-4-7 13:07:04

Rectangle.java
Circle.java
——22行抛出个异常岂不美哉

零度非安全 发表于 2017-4-7 13:27:16

Ry丶落魄书生 发表于 2017-4-7 13:07
Rectangle.java
Circle.java
——22行抛出个异常岂不美哉

暂时这系列还没讲到 Java 的异常处理

pyt1 发表于 2017-4-10 12:53:43

好久木来了

摆渡终极鉴黄师 发表于 2017-4-12 16:26:15

又更新了,辛苦了{:10_257:}

零度非安全 发表于 2017-4-12 17:16:15

摆渡终极鉴黄师 发表于 2017-4-12 16:26
又更新了,辛苦了

好久没有看到你了,摆渡终级鉴黄师

Yolanda小点 发表于 2017-10-31 20:04:58

昨晚开始看的,今天看完了,请问是不是不更新啦???{:10_266:}

bingbingpig 发表于 2018-8-7 10:21:50

大佬大佬 是不是之后就再也没有更新啦? 好想看你讲的JAVA呀,你快回来吧!!{:5_92:}

122815306 发表于 2018-10-25 12:08:37

大佬 这是最后一讲了么{:5_104:}
页: [1]
查看完整版本: 【Java 教程(原创)】026.对象的组合