无法对类型为Fisher的非静态方法getNumThingsCaught()进行静态引用

时间:2014-02-12 19:20:55

标签: java types static

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()进行静态引用”怎么能我改变了我的代码!//鱼//!使这段代码有效的类?

3 个答案:

答案 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”以确保无法覆盖它。