繁体   English   中英

从主类的子类中找不到变量

[英]Cannot find variable from subclass in main class

我试图通过使用v.Volume(volume);从我的测试类超类的子类中使用Volume方法v.Volume(volume); 但是却说找不到符号volume 我正在测试类中设置半径,并且应该从中输出体积。 我觉得我看起来很明显。 我知道它正在尝试使用超类中的名为volume的变量,但是我不确定该放置什么。

测试类代码

//balloon testing
    Balloon r = new Balloon();
    Balloon v = new Balloon();

    System.out.println("Radius " + r.getRadius());
    System.out.println("Volume " + v.getVolume());

    r.inflate(5);
    v.Volume(volume);

    System.out.println("Radius " + r.getRadius());
    System.out.println("Volume " + r.getVolume());

子类代码

public class Balloon {
//declare
public double radius;
public double volume;

//constructor
public Balloon(){
    radius = 0;
    volume = 0;
}

//setters
public void inflate(double r){
    radius = r;
}

//accessors
public double getRadius(){
    return radius;
}

public double getVolume(){
    return volume;
}

public void Volume(double volume){
    volume = ((4/3)* Math.PI * (radius*radius*radius));
}

}

目前尚不清楚您要问的是什么,但无论如何我都会尽力回答。

您在这里没有子类或超类, 这些都是非常具体的术语 ,欢迎您进一步了解。

不过,对于您的问题,我认为您的问题是在Volume方法中您传入了根本不用的参数( volume )。 而是根据半径设置成员变量( Balloon.volume )。 Balloon.volume与传递的参数double volume有很大不同。 我为您的课程添加了注释,以尝试阐明此处的情况。

public class Balloon {
    //declare
    public double radius; //this is the member variable which is a property of each member of the Balloon class. I refer to it above as Balloon.volume
    public double volume;

    public Balloon(){
        radius = 0;
        volume = 0;
    }

    public void inflate(double r){
        radius = r;
    }


    public double getRadius(){
        return radius;
    }

    public double getVolume(){
        return volume;
    }

    public void Volume(double volume){ //this is an external, unused parameter
        volume = ((4/3)* Math.PI * (radius*radius*radius)); //this sets Balloon.volume and ignores the parameter volume
    }

}

如果重命名变量,可能会更清楚发生了什么:

    public void Volume(double someOtherVolume){ //this is an external, unused parameter
        volume = ((4/3)* Math.PI * (radius*radius*radius)); //this sets Balloon.volume and ignores the parameter volume
    }

这应该清楚表明参数和成员变量是不同的。 您的符号异常来自以下行:

v.Volume(volume);

在parens中的变量从未定义。 您必须先声明并定义一个变量,然后再使用它。

double volume = 8;

由于在测试班级中,您不在气球类中,因此不能简单地引用Balloon.volume 您必须创建一个新变量。

将Volume方法主体更改为(并重命名):

public void calculateVolume(){
    volume = ((4/3)* Math.PI * (radius*radius*radius));
}

在调用此方法之前-通过设置器设置半径值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM