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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张权 中级黑马   /  2013-3-18 13:57  /  936 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张权 于 2013-3-18 14:45 编辑

代码时老毕的源代码, 不过有一点没听懂,求解释, 最好附上代码说明下!
问题: GetTime类定义了一个抽象方法 public abstract void runCoded(); 老毕说这个方法不一定是抽象的, 他的原话解释是这样的, 假设这个模板有默认的实现, 当觉得这个功能不爽时, 就可以修改, 完全没有明白这句话是什么意思....
abstract class GetTime {
        //该功能是确定的,不让被复写,所以用final修饰
        public final void getTime() {
                long startTime = System.currentTimeMillis();
                //该功能是不确定的,确定功能里面使用了不确定功能,所以考虑模板设计模式,把该功能暴露出去, 让子类完成
                runCode();
                long endTime = System.currentTimeMillis();
                System.out.println("runtime = " + (endTime - startTime) + "毫秒");
        }
        //为了让子类完成这部分不确定的功能, 所以定义成抽象方法.子类去重写.
        public abstract void runCode();
}

class RunCode extends GetTime {
        public void runCode() {
                for (int i = 0; i < 100; i++) {
                        System.out.println(i);
                }
        }
}

class TemplateDemo {
        public static void main(String[] args) {
                GetTime gt = new RunCode();
                gt.getTime();
        }
}

评分

参与人数 1技术分 +1 收起 理由
洪建超 + 1

查看全部评分

2 个回复

倒序浏览
runCode()方法就是暴露给外部,让子类复写的,将你想要获取其运行时间的代码放在runCode()方法内
runCode方法可以不定义成抽象的,就是说它里面可以封装默认的代码,
比如说里面是一个到100的for循环,默认是计算这100次循环所用的时间,而你觉得不爽,你要计算200次循环所用时间,那么你就把runCode()方法复写就行了
runCode方法是不是抽象的无所谓,只要将这个方法暴露出来能让子类复写就行了。

评分

参与人数 1技术分 +1 收起 理由
洪建超 + 1

查看全部评分

回复 使用道具 举报
戴乾刚 发表于 2013-3-18 14:18
runCode()方法就是暴露给外部,让子类复写的,将你想要获取其运行时间的代码放在runCode()方法内
runCode方 ...

哦, 明白了,谢谢!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马