鱼C论坛

 找回密码
 立即注册
查看: 6447|回复: 8

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

[复制链接]
发表于 2017-4-7 11:08:15 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

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

☟



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

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

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

成,如下所示:

0.png

我在下面的例子中一共写了 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 类创建对象,该对象调用相应的方法设置其中圆的位置和半径

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

运行效果如下:

1.png

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


&#10049;


&#10049;


本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-4-7 13:07:04 | 显示全部楼层
Rectangle.java
Circle.java
——22行抛出个异常岂不美哉
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-7 13:27:16 | 显示全部楼层
Ry丶落魄书生 发表于 2017-4-7 13:07
Rectangle.java
Circle.java
——22行抛出个异常岂不美哉

暂时这系列还没讲到 Java 的异常处理
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-10 12:53:43 | 显示全部楼层
好久木来了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-12 16:26:15 | 显示全部楼层
又更新了,辛苦了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-12 17:16:15 | 显示全部楼层

好久没有看到你了,摆渡终级鉴黄师
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-10-31 20:04:58 | 显示全部楼层
昨晚开始看的,今天看完了,请问是不是不更新啦???
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-7 10:21:50 | 显示全部楼层
大佬大佬 是不是之后就再也没有更新啦? 好想看你讲的JAVA呀,你快回来吧!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-25 12:08:37 | 显示全部楼层
大佬 这是最后一讲了么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-21 22:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表