A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 宋枢浩 黑马帝   /  2012-2-10 23:47  /  4232 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 宋枢浩 于 2012-2-13 23:18 编辑

abstract class GetTime
{
        public final void getTime()      //final修饰,则函数不能被继承。
        {
                long start = System.currentTimeMillis();
                runcode();
                long end = System.currentTimeMillis();
                System.out.println("毫秒:"+(end-start));
        }
        public  void runcode(){}
        //public abstract void runcode();
       
       
}

class SubTime extends GetTime
{
        public  void runcode()
        {
                enter(1,100000);
        }


        public void enter(int a,int b)
        {
                if(a<b)
                {
                        for (int x =a;x<b ;x++ )
                                {
                                        System.out.print(x);
                                }
                }
                else
                        System.out.println("wrong");
        }
}
class  GetTime1
{
        public static void main(String[] args)
        {
                SubTime s = new SubTime();
                s.getTime();
       
        }
}
···················································································································
这个程序是读取程序运行的时差。GetTime是进行计算的。
我想在主程序里面调用SubTime(),然后输入两个数字就行比较——s.getTime(数字1,数字2)。
然后程序运行就会输出运行时差。这个怎么实现?大神们出现吧!

评分

参与人数 1技术分 +1 收起 理由
唐秀启 + 1 请把求助改成已解决 谢谢合作

查看全部评分

6 个回复

倒序浏览
//final修饰,则函数不能被继承。
final修饰方法时,可以被继承,但是不可以被重写

评分

参与人数 1技术分 +1 收起 理由
唐秀启 + 1

查看全部评分

回复 使用道具 举报
程序运行结果正确啊 你想要什么结果?
回复 使用道具 举报
本帖最后由 侯丽星 于 2012-2-11 15:26 编辑

被final修饰的方法只是不能被重写,而不是不能被继承。
若想在主程序里面通过s.getTime(数字1,数字2)来计算运行时差,那么可以通过在SubTime类中重载父类的getTime方法来实现,如下:
class SubTime extends GetTime
{
        public  void runcode()
        {
                enter(1,100000);
        }


       public void enter(int a,int b)
        {
                if(a<b)
                {
                        for (int x =a;x<b ;x++ )
                                {
                                        System.out.print(x);
                                }
                }
                else
                        System.out.println("wrong");
        }
      
       public final void getTime(int a,int b)
       {
               long start = System.currentTimeMillis();
               enter(a,b);
               long end = System.currentTimeMillis();
               System.out.println("毫秒:"+(end-start));
       }
}


class GetTime1 {

        public static void main(String[] args) {
        // TODO Auto-generated method stub
        SubTime s = new SubTime();
                 s.getTime(1,100000);
        }
}

评分

参与人数 1技术分 +1 收起 理由
唐秀启 + 1

查看全部评分

回复 使用道具 举报
我这里就直接说明你的问题。 final方法不能被子类的方法覆盖,但可以被继承。 final成员变量表示常量,只能被赋值一次,赋值后值不再改变。 final不能用于修饰构造方法。 在子类中SubTime 复写了abstract class GetTime的runcode()方法。在创建子类对象引用时依然能发挥getTime() 的作用。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
谢谢!我已经修改成功了!
回复 使用道具 举报
李杨 黑马帝 2012-2-14 00:24:38
7#
其实这些细节,你好好分析分析就没什么难的了。

什么final什么abstract都是修饰符,你需要根据这些修饰符的含义来体会面向对象的多态(polymorphism),继承(inheritance)和封装(encapsulation)。。

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马