下面是我的类Range的代码的一部分,以及一个名为Tree的单独类中的构造函数。在这个构造函数中,我试图将类范围中的对象实例化到我的树类。当我尝试在树类中编译我的构造函数时,它说我试图调用的方法不能从静态上下文中引用。我是以正确的方式来做这件事的吗?我很确定这是一个非常简单的解决办法,但我无法弄明白。感谢
public class Range{
int low, high;
public Range(int plow, int phigh){
low = plow;
high = phigh;
}
public int getLow(){
return low;
}
public int getHigh(){
return high;
}
public class Tree {
String name;
public Tree(String pname, int plow, int phigh) {
name = pname;
Range.getHigh() = phigh; <---where error message is
Range.getLow() = plow;
}
}
答案 0 :(得分:2)
您的代码有两个问题:首先,getLow()
和getHigh()
是实例方法,而不是类方法。但是,您可以通过Range.getLow()
和Range.getHigh()
来调用它们,这意味着您可以在课程Range
上调用它们。这是不允许的。首先,您必须创建该类的实例:
ran = new Range(...)
然后在此实例上调用方法:
ran.getHigh();
ran.getLow();
您的代码的另一个问题是您正在尝试为方法调用分配值:
Range.getHigh() = phigh;
这在Java中是不可能的。 Java方法返回值,您无法分配值。也就是说,方法getHigh()
和getLow()
意味着读取范围的高值和低值,而不是设置它们。在类Range
的情况下,设置这些值只能通过调用构造函数来实现。
您可能想要做的是将Range
类型的成员变量添加到Tree
类,然后在构造函数中设置该变量:
ran = new Range(plow, phigh);
答案 1 :(得分:0)
您必须先创建一个范围对象,然后才能调用其方法
public Tree(String pname, int plow, int phigh){
name = pname;
Range ran = new Range(phigh, plow);
}
答案 2 :(得分:0)
使用setter设置变量
public class Range{
static int low, high;
public Range(int plow, int phigh){
low = plow;
high = phigh;
}
public static int getLow(){
return low;
}
public static int getHigh(){
return high;
}
public static void setLow(int low) {
Range.low = low;
}
public static void setHigh(int high) {
Range.high = high;
}
然后调用静态方法来设置值或获取
public class Tree{
String name;
public Tree(String pname, int plow, int phigh){
name = pname;
Range.setHigh(phigh); //---where error message is
Range.setLow(plow);
}
}