帮忙看一下这段代码有问题吗?为什么在main()方法里调用一个类里的static方法(answer())总是提示"找不到方法"?
用的是JCreate 3.5 Pro编译器.
import java.util.*;interface SharedConstants
{
int NO=0;
int YES=1;
int MAYBE=2;
int LATER=3;
int SOON =4;
int NEVER=5;
}class Question implements SharedConstants
{
Random rand=new Random();

int ask()
{
int prob=(int)(100*rand.nextDouble());
if(prob<30)
return NO;
else if(prob<60)
return YES;
else if(prob<75)
return MAYBE;
else if(prob<90)
return LATER;
else if(prob<100)
return SOON;
else
return NEVER;
}
}class AskMe implements SharedConstants
{
static void answer(int result)
{
switch(result)
{
case NO:
System.out.println("No");
break;
case YES:
System.out.println("Yes");
break;
case MAYBE:
System.out.println("Maybe");
break;
case LATER:
System.out.println("Later");
break;
case SOON:
System.out.println("Soon");
break;
case NEVER:
System.out.println("Never");
break;
}
}
}class SeveralSubClassSample
{
public static void main(String args[])
{
Question q = new Question();

for(int i=1;i<10;i++)
{
answer(q.ask());
}
}
}谢谢!

解决方案 »

  1.   

    static void answer(int result) 前面加一个public就行了
      

  2.   

    楼主你知道new Question ,为什么就不知道new AskMe了呢
      

  3.   

    2、4楼正解,三楼方法也可通过,急new AskMe().answer(q.ask()).
      

  4.   

    都有正确答案了,在Java中,static的本意就是用CLASS名字直接来调用方法。。所以2、4楼正解!
      

  5.   

    直接在类名的后面加上方法名
    AskMe.answer
    楼上的楼主门都是精英啊,以后要多多请教了
      

  6.   

    谢谢各位的热心回复解答!
    问题解决了. 不过还有点不明白的是:new AskMe().answer(q.ask()); 与AskMe.answer(q.ask());有没什么区别?什么情况下用new AskMe().answer(q.ask());?  以前只见过AskMe.answer(q.ask());.
      

  7.   

    11楼说"匿名类"
    ================================
    "匿名类是一种特殊的内部类,匿名类是不能有名称的类."
    而这里的AskMe不是内部类,且在使用前已有定义.还是不明白.可否解释下?
      

  8.   

    new AskMe().answer(q.ask()); //new AskMe()就是新建个AskMe类的对象,后面加个.answer(q.ask())表示调用这个对象的answer方法
    AskMe.answer(q.ask());//因为你这个answer方法是static的,所以可以直接通过类名来调用
    这2个不搞啊,怎么搞起来了。
      

  9.   

      如果方法是static 用类名直接调用!!
      应为static方法是在类初始化时也初始化了
      

  10.   

    静态方法嘛,当然通过类名调用: AskMe.answer()