简单说,就是不同类的多个对象之间彼此调用对方的方法和变量,可能会多次调用,所以叫复用(重复),所有对象本身具有独立的功能(方法),共同完成一项任务的一部分,或者多个类的对象协助一个类完成一个任务。
多次调用存在 对象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;//底面积没赋值,返回错误-1elsereturn 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系统分配内存单元给circlecircle.setRadius(10);/*将10传递给r,此时形参暂时变实参,*被方法调用,然后在circle的方法setRadius中,将r的 值10赋值给成员变量radius*/Circular circular = new Circular();//Java系统分配内存单元给circularSystem.out.println("circle的引用:"+circle);System.out.println("圆锥bottom的引用:"+circular.bottom);//尚未赋值,因此为空nullcircular.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引用的一样,都是实体变量radiumSystem.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,原来传递的值不发生变化。}
}