public class Fisher {
public static int LIMIT = 10; // max # of fish that can be caught
private int numThingsCaught = 0;
public int getNumThingsCaught() { return numThingsCaught; }
}
这是我的第二堂课
public class Fish {
public boolean isDesirableTo(Fisher f) {
if (Fisher.getNumThingsCaught() < Fisher.LIMIT)
return true;
return false;
}
}
我正在使用eclipse和Fisher.getNumThingsCaught()加下划线,当我将鼠标悬停在上面看错误消息时说:“无法对类型Fisher的非静态方法getNumThingsCaught()进行静态引用”怎么能我改变了我的代码!//鱼//!使这段代码有效的类?
答案 0 :(得分:2)
您可以将Fisher.getNumThingsCaught()
更改为f.getNumThingsCaught()
,因为f
是对Fisher
对象的引用,或者您可以将该方法设为静态(这不是您想要的) )
所以它看起来像:
if (f.getNumThingsCaught() < Fisher.LIMIT)
return true;
return false;
另一个编程提示。当您立即定义静态变量时,请考虑将其设为final
。因为我假设您不希望LIMIT
变量发生变化。
答案 1 :(得分:0)
在这段代码中:Fisher.getNumThingsCaught()
Fisher是类的名称,不是对象的引用。由于getNumThingsCaught
方法不是静态的,因此需要在对象实例上调用它。
解决方案:只需将其更改为f.getNumThingsCaught()
答案 2 :(得分:0)
在Fish类中,您需要引用Fisher实例。您可以通过以下方式执行此操作:
public class Fish {
Fisher fisher = null;
public boolean isDesirableTo(Fisher f)
{
fisher = new Fisher();
if (fisher.getNumThingsCaught() < Fisher.LIMIT)
{
return true;
}
return false;
}
}
if (f.getNumThingsCaught() < Fisher.LIMIT)
return true;
return false;
将最终修饰符添加到“LIMIT”以确保无法覆盖它。