对象的组合复用学习笔记

时间:2024-03-14 06:56:40

简单说,就是不同类的多个对象之间彼此调用对方的方法和变量,可能会多次调用,所以叫复用(重复),所有对象本身具有独立的功能(方法),共同完成一项任务的一部分,或者多个类的对象协助一个类完成一个任务。

多次调用存在 对象A 使用了对象B{b()}中的方法b(),然后方法C又使用了方法A中 通过调用方法B得到的变量或或方法,这算是一种比较难理解的。有点像俄罗斯套娃。

Circle类:

package thirdproject;

public class Circle {
   double radius,area;
   void setRadius(double r) {
	   radius = r;
   }
   double getRadius() {
	   return radius;
   }
   double getArea() {
	   area = 3.14*radius*radius;
	   return area;
   }
}

Cicular类: 

package thirdproject;

public class Circular {
Circle bottom;//定义一个Circle类型地bottom
double height;
void setBottom(Circle c) {//方法,获取底圆面积,形参是Circle类型的
    bottom = c;
}
void setHeight(double h) {//方法,获取圆锥的高
	height = h;
}
double getVolume() {//方法,计算体积
	if(bottom == null)
		return -1;//底面积没赋值,返回错误-1
	else
		return bottom.getArea()*height/3.0;//返回计算得得圆锥的体积
}
double getBottomRadius() {//返回底面圆的半径
	return bottom.getRadius();//调用Circle类的对象bottom的getRadius()方法,
}
public void setBottomRadius(double r) {
	bottom.setRadius(r);
}
}

主类: 

package thirdproject;

public class Example4_8 {
  public static void main(String []args) {
	  Circle circle = new Circle();//Java系统分配内存单元给circle
	  circle.setRadius(10);/*将10传递给r,此时形参暂时变实参,
	  *被方法调用,然后在circle的方法setRadius中,将r的 值10赋值给成员变量radius*/
	  Circular circular = new Circular();//Java系统分配内存单元给circular
	  System.out.println("circle的引用:"+circle);
	  System.out.println("圆锥bottom的引用:"+circular.bottom);//尚未赋值,因此为空null
	  circular.setHeight(5);
	  circular.setBottom(circle);//此处发生:将circle对象的引用(传值)传递给circular的bottom,注意!!传的是circle的引用
	  /*此时的circular.bottom和circle具有相同的实体radium
	   * 这里相当于把使用circlr对象下的方法和成员变量的权限给了circular的bottom*/
	  System.out.println("circle的引用:"+circle);
	  System.out.println("circular对象的变量bottom的引用:"+circular.bottom);//输出结果和上面circle一样,bottom引用的实体内容和circle引用的一样,都是实体变量radium
	  System.out.println("圆锥的体积:"+circular.getVolume());//调用circular的计算体积的方法
	  System.out.println("修改对象cirlce中的值,circular中的bottom的值也会发生变化,原因是,\ncircle和circular都是引用radium这个实体变量的哈希码,也就是地址位置等信息\n因此输出的结果都会变化");
	  circle.radius=20;
	  System.out.println("circle中的r值circle.radius="+circle.radius);
	  System.out.println("同时circular中的bottom的值circular.bottom="+circular.bottom.getRadius());
	  System.out.println("重新创建circle");
	  circle = new Circle();
	  System.out.println("circle的引用:"+circle);
	  //新创建的这个circle不影响原来被bottom引用的那个circle,原来传递的值不发生变化。
  }
}

相关文章