无法从主类的子类中找到变量

时间:2016-02-24 01:54:09

标签: java variables subclass superclass

我正在尝试使用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));
}

}

2 个答案:

答案 0 :(得分:2)

我不清楚你在这里问的是什么,但我还是试着回答。

您在这里没有子类或超类,those are very specific terms欢迎您阅读更多信息。

但是,对于您的问题,我认为您的问题是在您的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。您必须创建一个新变量。

答案 1 :(得分:1)

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

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

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