黑马程序员技术交流社区

标题: 关于抽象和重写的问题 [打印本页]

作者: 从前有个人    时间: 2013-11-3 19:54
标题: 关于抽象和重写的问题

public class gettime {

        /**
         * @param args
         */
        public static void main(String[] args) {
               
                SetTime time = new SetTime();
                System.out.println(time.end-time.start);
        }
}

abstract class GetTime{
        long start = System.currentTimeMillis();
        abstract double runCode();
       
        long end = System.currentTimeMillis();
}

class RunCode{
        static double runCode(){
                double x =9;
                for(; x<99 ;x++)
                        x*=x;
                return x;
        }
}

class SetTime extends GetTime{
       
         double runCode(){  //此行的多个标记: -此方法必须返回double类型的结果; -实现GetTime.runCode
                 RunCode.runCode();
        }
}

注释的那一行会报错,内容如注释所述。求解答,错在哪里,如何修改。


作者: 麦者    时间: 2013-11-3 20:06
你注释的那一行是关键字没加,return
  1. class SetTime extends GetTime{
  2.    
  3.      double runCode()
  4.      {  //此行的多个标记: -此方法必须返回double类型的结果; -实现GetTime.runCode
  5.              return RunCode.runCode();
  6.     }
  7. }
复制代码

作者: joechen    时间: 2013-11-3 20:07
1,看看java文件命名是否和主函数类名相同
2,最后一段代码没加return语句
作者: 从前有个人    时间: 2013-11-3 20:22
麦者 发表于 2013-11-3 20:06
你注释的那一行是关键字没加,return

呃,你可以加一下试一试…… 加了之后运行会疯的…… 而且,为啥要加return,重写方法为啥需要写个return上去?
作者: 魏-玉-彪    时间: 2013-11-3 21:15
  1. package test;

  2. public class GetTest {

  3.         public static void main(String[] args) {
  4.                
  5.                 SetTime time = new SetTime();
  6.                 System.out.println(time.end-time.start);
  7.         }
  8. }

  9. abstract class GetTime{
  10.         long start = System.currentTimeMillis();
  11.         abstract double runCode();
  12.       
  13.         long end = System.currentTimeMillis();
  14. }

  15. class RunCode{
  16.         static double runCode(){
  17.                 double x =9;
  18.                 for(; x<99 ;x++)
  19.                         x*=x;
  20.                 return x;
  21.         }
  22. }

  23. class SetTime extends GetTime{
  24.       
  25.          double runCode()   //此行的多个标记: -此方法必须返回double类型的结果;
  26.          
  27.          {  
  28.                return RunCode.runCode();  //return 代表返回值    如果不想加return 请将上面的duuble 改为void
  29.         }
  30. }
  31. <font color="Navy">
  32. </font>
复制代码
  方法的定义方式, 权限修饰符 +返回值类型+方法名+()+{语句序列}
     double  代表double类型返回值   ;如果定义了返回值类型,自然要用  return返回内容
       void 代表没有返回值, 定义为无返回值就不用返回了




作者: 冯国强    时间: 2013-11-3 21:40
class SetTime extends GetTime
{
       double runCode()  //此行的多个标记: -此方法必须返回double类型的结果; -实现GetTime.runCode
      {
                 RunCode.runCode();
      }
}
这里出现的问题是方法的定义出现问题,类SetTime继承GetTime类,重写方法runCode();因此,函数中必须符合类GetTime声明方法的要求,要有double型的返回值。
      语句应为return RunCode.runCode();

作者: 杨增坤    时间: 2013-11-3 22:05
从前有个人 发表于 2013-11-3 20:22
呃,你可以加一下试一试…… 加了之后运行会疯的…… 而且,为啥要加return,重写方法为啥需要写个return ...

因为那个方法要有返回值的,
作者: 从前有个人    时间: 2013-11-3 23:26
杨增坤 发表于 2013-11-3 22:05
因为那个方法要有返回值的,

我重写的内容是调用静态方法,被调用的那个方法中有返回值,为什么还要再写一个return?
作者: 杨增坤    时间: 2013-11-4 09:35
从前有个人 发表于 2013-11-3 23:26
我重写的内容是调用静态方法,被调用的那个方法中有返回值,为什么还要再写一个return? ...

但是你必须要使用一个变量来接受,否则就相当于一个变量,不是当前当方法返回值,
相当于   public int(){
        5;
}

不是当前方法返回值。




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