黑马程序员技术交流社区

标题: 师兄师姐们,看看我这个错误是怎么回事?老是编译不通过 [打印本页]

作者: ujump    时间: 2015-6-16 09:20
标题: 师兄师姐们,看看我这个错误是怎么回事?老是编译不通过
  1. abstract class student
  2. {
  3. public abstract void study();
  4. public void sleep()
  5. {System.out.println("躺睡");}

  6. }
  7. class BaseStudent extends student
  8. {public void study()
  9. {System.out.println("base学习");}
  10. public void sleep()
  11. {System.out.println("坐睡");}
  12. }
  13. class Advsstudent extends student
  14. {public void study()
  15. {System.out.println("adcs学习");}

  16. }
  17. class duotaidemo
  18. {
  19. public static void main(String[] args)
  20. {BaseStudent as=new BaseStudent();
  21. as.study();
  22. as.sleep();
  23. Advsstudent ss=new Advsstudent();
  24. ss.study();
  25. ss.sleep();
  26. fangf(new BaseStudent());
  27. fangf(new Advsstudent());

  28. }

  29. public void fangf(Student ss)
  30. {
  31. ss.study();
  32. ss.sleep();


  33. }


  34. }
复制代码

提示的错误是无法从上下文中静态中引用非静态方法,我去,快疯了我
作者: ujump    时间: 2015-6-16 09:36
如果按照老师说的把方法提取出来 还是会编译通过的 但是按照老师的不加static就通不过为什么 :dizzy:
作者: micro_hx    时间: 2015-6-16 09:37
Student是一个抽象类啊。。。。不能作为参数传递啊。。。。。
作者: yang9876q    时间: 2015-6-16 09:46
本帖最后由 yang9876q 于 2015-6-16 09:48 编辑

你这总共出现两种错误,一个是找不到Student(fangf方法的参数应该是student,而不应该是Student,因为你定义的是student类,小写的),一个是静态中引用非静态方法(错误原因:主函数是静态的,其调用的方法也应该是静态的,fangf方法你定义的是非静态的)。
正确程序如下:
  1. abstract class student
  2. {
  3. public abstract void study();
  4. public void sleep()
  5. {System.out.println("躺睡");}

  6. }
  7. class BaseStudent extends student
  8. {public void study()
  9. {System.out.println("base 学习");}
  10. public void sleep()
  11. {System.out.println("坐睡");}
  12. }
  13. class Advsstudent extends student
  14. {public void study()
  15. {System.out.println("adcs 学习");}

  16. }
  17. class duotaidemo
  18. {
  19. public static void main(String[] args)
  20. {BaseStudent as=new BaseStudent();
  21. as.study();
  22. as.sleep();
  23. Advsstudent ss=new Advsstudent();
  24. ss.study();
  25. ss.sleep();
  26. fangf(new BaseStudent());
  27. fangf(new Advsstudent());

  28. }

  29. public static void fangf(student ss)
  30. {
  31. ss.study();
  32. ss.sleep();


  33. }


  34. }
复制代码




作者: 小悟空et    时间: 2015-6-16 10:00
因为fangf是非静态方法吧
作者: ujump    时间: 2015-6-16 10:34
大神们 为甚么把方法抽取出来 新建个类 就不用静态了,郁闷 上面的同学说的很有用 我支持你们了……




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2