黑马程序员技术交流社区

标题: 在主函数中调用其他类中的函数, [打印本页]

作者: 宋枢浩    时间: 2012-2-10 23:47
标题: 在主函数中调用其他类中的函数,
本帖最后由 宋枢浩 于 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)。
然后程序运行就会输出运行时差。这个怎么实现?大神们出现吧!
作者: 秦碧    时间: 2012-2-11 08:32
//final修饰,则函数不能被继承。
final修饰方法时,可以被继承,但是不可以被重写
作者: 尹旗龙    时间: 2012-2-11 14:50
程序运行结果正确啊 你想要什么结果?
作者: 侯丽星    时间: 2012-2-11 15:23
本帖最后由 侯丽星 于 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);
        }
}


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

作者: 宋枢浩    时间: 2012-2-13 23:20
谢谢!我已经修改成功了!

作者: 李杨    时间: 2012-2-14 00:24
其实这些细节,你好好分析分析就没什么难的了。

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






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