在 main class 中找不到来自 subclass 的变量

Cannot find variable from subclass in main class

我正在尝试通过使用 v.Volume(volume); 在我的测试 class super class 中使用我的子 class 中的 Volume 方法,但它说它找不到符号 volume。我在测试 class 中设置了半径,它应该从中输出音量。我觉得我在看一些非常明显的东西。我知道它正在尝试使用来自 super class 的名为 volume 的变量,但我不确定要放什么。

测试class代码

//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());

子class代码

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 方法主体更改为(并重命名):

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

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

不清楚你在这里问什么,但我会尽力回答。

这里没有子class或超级class,those are very specific terms欢迎阅读更多相关内容。

不过,对于你的问题,我认为你的问题是在你的 Volume 方法中你传递了一个你根本不使用的参数 (volume)。相反,您根据半径设置一个成员变量 (Balloon.volume)。 Balloon.volume 与传递的参数 double volume 有很大不同。我已经对您的 class 进行了注释,以试图阐明这里发生了什么。

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;

因为在你的测试中class你在气球外class,你不能简单地引用Balloon.volume。您必须创建一个新变量。