简单说,就是不同类的多个对象之间彼此调用对方的方法和变量,可能会多次调用,所以叫复用(重复),所有对象本身具有独立的功能(方法),共同完成一项任务的一部分,或者多个类的对象协助一个类完成一个任务。
多次调用存在 对象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,原来传递的值不发生变化。
}
}