java组合类,对象组合,定义一个点类,将圆的圆心用点类的对象表示,则圆类定义为一个组合类,仍然能计算圆的面积和周长,并能对圆进行移动。

对象组合的概念
如果一个对象中的域是其他类的对象,则称这个对象是组合对象,组合对象所在的类是组合类。例如计算机是由其他部件(对象)组成的。通过组合的方式,可以简化对象的创建过程,提高对象的创建效率。从程序设计来看,组合对象可以做到代码重用,提高编程效率。
编写程序时,尽可能的将一个复杂的对象分解成若干个容易表示的对象,每个对象所对应的类都是较为简单的类,以便于问题的解决。
组合类的定义和使用
组合类的定义与一般类的定义方式相同,只不过类的部分域或全部域不是数据基本类型数据,而是由其他类所定义的对象。
例:
定义一个点类,将圆的圆心用点类的对象表示,则圆类定义为一个组合类,仍然能计算圆的面积和周长,并能对圆进行移动。
对圆进行移动,实际上就是改变圆心的坐标,而圆心坐标是用点的对象表示的,所以这个圆心对象的坐标改变了,圆的位置就会改变。在定义点类时,在点类中定义一个可以改变点位置的方法,然后在圆类中直接利用这个方法改变圆的位置,从而实现代码重用。

class Point {   //点类
 private int x,y;   //点的位置
 public  Point(int x,int y) { //构造方法,用一对坐标值构造
  this.x=x;
  this.y=y;
 }
 public Point(Point p) {
  x=p.x;       //构造方法,用本身类对象构造
  y=p.y;
 }
 public int getX(){
  return x;  //获得x分量
 }
 public int getY() {
  return y;  //获得y分量
 }
 //移动点的方法,x和y的增量分别是offsetX和offsetY
 public void move(int offsetX,int offsetY){
  x=x+offsetX;
  y=y+offsetY;
 }
}
class Circle{           //组合类
 private double radius;
 private Point center;  //Point类的对象
 
 //构造方法,用点坐标(x,y)构造圆对象
 public Circle (double radius,int x,int y) {
  this.radius=radius;
  center=new Point(x,y);
 }
 //构造方法,用点类的对象构造圆对象
 public Circle (double radius,Point p) {
  this.radius=radius;
  center=new Point(p);
 }
 //计算圆面积
 public double area(){
  return Math.PI*radius*radius;
 }
 //计算圆周长
 public double perimeter(){
  return Math.PI*2*radius;
 }
 //获取圆心x坐标
 public int getCenterX() {
  return center.getX();//直接调用点类中的方法获取
 }
 //获取圆心y坐标
 public int getCenterY() {
  return center.getY();//直接调用点类中的方法获取
 }
 //移动圆
 public void move(int offsetX,int offsetY) {
  center.move(offsetX,offsetY);
 }
}
public class Example10 {
 public static void main(String[] args) {
  int x=15,y=25;
  double radius =10;
  Circle a=new Circle(radius,x,y);
  System.out.printf("a的面积是:%.2f,",a.area());
  System.out.printf("a的周长是:%.2f\n",a.perimeter());
  
  System.out.print("移动前a的位置:");
  System.out.println("("+a.getCenterX()+","+a.getCenterY()+")");
  a.move(11,12);//移动圆
  System.out.print("移动后a的位置;");
  System.out.println("("+a.getCenterX()+","+a.getCenterY()+")");
  
  Point p=new Point(-15,-25);  //创建一个点类的对象
  radius=15;
  Circle b=new Circle(radius,p);
  System.out.printf("b的面积是:%.2f,",b.area());
  System.out.printf("b的周长是:%.2f\n",b.perimeter());
  
  System.out.print("移动前b的位置:");
  System.out.println("("+b.getCenterX()+","+b.getCenterY()+")");
  b.move(-11,-12);//移动圆
  System.out.print("移动后b的位置;");
  System.out.println("("+b.getCenterX()+","+b.getCenterY()+")");
 }
}
  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值