【问题标题】:Cannot find variable from subclass in main class在主类的子类中找不到变量
【发布时间】:2016-02-24 01:54:09
【问题描述】:

我正在尝试通过使用v.Volume(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));
}

}

【问题讨论】:

  • Java 不是通过引用传递。
  • 将方法名重命名为calculateValue。

标签: java variables subclass superclass


【解决方案1】:

不清楚你在这里问什么,但无论如何我都会尝试回答。

这里没有子类或超类,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);

括号中的变量从未定义。使用前必须先声明和定义一个变量。

double volume = 8;

由于在您的测试课程中您不在气球课程中,您不能简单地参考Balloon.volume。您必须创建一个新变量。

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 谢谢!有了这个并将方程移动到它工作的 getVolume 方法中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多