为什么在main()方法里调用一个类里的static方法总是提示"找不到方法"?

hflyingheart 2008-08-22 02:19:51
帮忙看一下这段代码有问题吗?为什么在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());
}
}
}

谢谢!
...全文
369 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
hflyingheart 2008-08-23
  • 打赏
  • 举报
回复
11楼说"匿名类"
================================
"匿名类是一种特殊的内部类,匿名类是不能有名称的类."
而这里的AskMe不是内部类,且在使用前已有定义.还是不明白.可否解释下?
lianghy 2008-08-23
  • 打赏
  • 举报
回复
静态方法嘛,当然通过类名调用: AskMe.answer()
zzhua100 2008-08-23
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 hflyingheart 的回复:]
谢谢各位的热心回复解答!
问题解决了. 不过还有点不明白的是:new AskMe().answer(q.ask()); 与AskMe.answer(q.ask());有没什么区别?什么情况下用new AskMe().answer(q.ask());? 以前只见过AskMe.answer(q.ask());.
[/Quote]

问题解决了就该结贴,不能以后人家就不会回答你的问题了。
jellylilg 2008-08-23
  • 打赏
  • 举报
回复
如果方法是static 用类名直接调用!!
应为static方法是在类初始化时也初始化了。。。
fwloveyou 2008-08-23
  • 打赏
  • 举报
回复
匿名类,上网自己找找,多的去了
magicxin031 2008-08-23
  • 打赏
  • 举报
回复
new AskMe().answer(q.ask()); //new AskMe()就是新建个AskMe类的对象,后面加个.answer(q.ask())表示调用这个对象的answer方法
AskMe.answer(q.ask());//因为你这个answer方法是static的,所以可以直接通过类名来调用
这2个不搞啊,怎么搞起来了。
gjl_gjl 2008-08-23
  • 打赏
  • 举报
回复
好像还么有学过,呵呵~~
hflyingheart 2008-08-22
  • 打赏
  • 举报
回复
谢谢各位的热心回复解答!
问题解决了. 不过还有点不明白的是:new AskMe().answer(q.ask()); 与AskMe.answer(q.ask());有没什么区别?什么情况下用new AskMe().answer(q.ask());? 以前只见过AskMe.answer(q.ask());.
zhao_tk 2008-08-22
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 zzhua100 的回复:]
2、4楼正解,三楼方法也可通过,急new AskMe().answer(q.ask()).
[/Quote]
bugger_money 2008-08-22
  • 打赏
  • 举报
回复
直接在类名的后面加上方法名
AskMe.answer
楼上的楼主门都是精英啊,以后要多多请教了
SARA520 2008-08-22
  • 打赏
  • 举报
回复
小小汗一下
elveny 2008-08-22
  • 打赏
  • 举报
回复
都有正确答案了,在Java中,static的本意就是用CLASS名字直接来调用方法。。所以2、4楼正解!
zzhua100 2008-08-22
  • 打赏
  • 举报
回复
2、4楼正解,三楼方法也可通过,急new AskMe().answer(q.ask()).
songzhen640 2008-08-22
  • 打赏
  • 举报
回复
类名加点 AskMe.answer
ldxfsh 2008-08-22
  • 打赏
  • 举报
回复
楼主你知道new Question ,为什么就不知道new AskMe了呢
feng8008 2008-08-22
  • 打赏
  • 举报
回复
AskMe.answer
lude8880 2008-08-22
  • 打赏
  • 举报
回复
static void answer(int result) 前面加一个public就行了

62,628

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧