在 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
。您必须创建一个新变量。
我正在尝试通过使用 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
。您必须创建一个新变量。