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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张亚青 中级黑马   /  2013-3-16 06:47  /  1164 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1、对于静态方法,怎么设计成模板?

如下面代码:我想要在main函数中直接调用showTime()方法,则showTime()方法必须是静态的,从而模板类ShowTime中的方法showTime()和run()也必须是静态的,但是如果定义成abstract static void run();则会报错,因为abstract和static不能同时存在,请问该怎么办?

  1. package chapter12;
  2. import java.io.*;

  3. class CopyMedia extends ShowTime
  4. {
  5.         public static void main(String [] args)
  6.         {
  7.                 showTime();
  8.         }


  9.         public static void run()
  10.         {
  11.                 try
  12.                 {
  13.                         copyMp3();
  14.                 }
  15.                 catch (Exception e)
  16.                 {
  17.                         e.printStackTrace();
  18.                 }
  19.         }

  20.         //复制图片文件
  21.         public static  void copyPic() throws IOException
  22.         {

  23.         }
  24.         //复制mp3文件
  25.         public static  void copyMp3() throws IOException
  26.         {
  27.                
  28.         }

  29. }
  30. //下面是显示程序运行时间的模板类

  31. abstract class ShowTime
  32. {
  33.         public static void showTime()
  34.         {
  35.                 long start =System.currentTimeMillis();
  36.                 run();
  37.                 long end =System.currentTimeMillis();

  38.                 System.out.println((end-start)+"毫秒");
  39.         }

  40.         abstract static void  run();//这里编译的时候会报错,abstract和static 不能同时存在
  41. }

复制代码
2、对于上面的代码中,如果我想分别显示复制图片文件和复制mp3文件的时间,又该如何实现?

因为模板中showTime()方法中显示的是run()方法的运行时间,总不能每次运行我要去修改代码?
我的问题是该如何实现把要运行的方法作为参数传给run方法?
即:在main方法中,实现类似效果:
showTime(复制图片);
showTime(复制MP3);

点评

如果问题未解决,请继续追问回复者,如果问题已经解决,请将分类改为“已解决”,谢谢  发表于 2013-3-16 23:17

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1 赞一个!

查看全部评分

2 个回复

倒序浏览
你现在写的代码不像是你说的模板设计方法!模板设计方法也是多态的应用,你这都没有父类的引用指向子类的对象,不存在多态问题。
对于你这题,你可以在父类中,也就是ShowTime中,建一个方法,调用本类的抽象方法,然后你在用的时候,直接用父类的引用指向子类的对象,然后再调用你建的方法,那样执行的就是子类的重写的方法了。模板设计的要点是,在父类中创建一个方法,然后再调用父类的抽象方法,子类必须要重写父类的抽象方法,以便实现你要的功能!

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 郑晓飞 于 2013-3-16 15:59 编辑

  abstract static void  run();//这里编译的时候会报错,abstract和static 不能同时存在

static 在定义抽象方法的时候不用加
static是静态,就是在编译时已经确定的东西,当然不能是抽象(动态)的,那是运行时才能确定的东西
static和dynamic是反义词
而abstract是为了实现dynamic。所以static和abstract是不能共存的。

评分

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

查看全部评分

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