java对象传值问题
按自己理解写了书上例题,在运行时发现编译正常,但运行报错,却没有提示原因,像这样
于是按照书上代码挨个查,发现少了加注释的这块,看完之后也是豁然开朗
public class 例8 {
public static void main(String[] args) {
Circle circle1=new Circle();
circle1.setRadius(10);
System.out.println("circle1:r="+circle1.getRadius()+" area="+circle1.CircleArea());
Circle circle2=new Circle();
circle2.setRadius(20);
System.out.println("circle2:h="+circle2.getRadius()+" area="+circle2.CircleArea());
Circular circular1=new Circular();
circular1.setHeight(10);
// circular1.setbottom(circle1); // bottom与circle1建立连接,即circular1可用circle1的数据
System.out.println("circular1:h="+circular1.getHeight()+" volume="+circular1.Volume());
}
}
class Circle{
double radius; //半径
double area; //面积
void setRadius(double r) {
radius=r;
}
double getRadius() {
return radius;
}
double CircleArea() {
return radius*radius*3.14;
}
}
class Circular{
Circle bottom;
double height;
// void setbottom(Circle c) { //设置bottom是一个Circle对象
// bottom=c;
// }
void setHeight(double h) {
height=h;
}
double getHeight() {
return height;
}
double Volume(){
return bottom.CircleArea()*height;
}
}
1.这段代码意思是本来bottom是Circle类的对象,在这段函数里引用传值,使Circular类将Circle类的bottom对象变成自己的成员变量,Circular类的setbottom方法的形参为Circle,即bottom对象可在Circular类的其他方法中用Circle类中的方法。
2.Circular类将Circle类的bottom对象变成自己的成员变量使彼此关联后,则可在Circular的方法中调用Circle的数值,运行结果也正确。
运行结果:为了使结果明显,代码做了微调(圆锥体积没除以3)