黑马程序员技术交流社区

标题: 关于模板设计方法的问题 [打印本页]

作者: 张亚青    时间: 2013-3-16 06:47
标题: 关于模板设计方法的问题
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 08:07
你现在写的代码不像是你说的模板设计方法!模板设计方法也是多态的应用,你这都没有父类的引用指向子类的对象,不存在多态问题。
对于你这题,你可以在父类中,也就是ShowTime中,建一个方法,调用本类的抽象方法,然后你在用的时候,直接用父类的引用指向子类的对象,然后再调用你建的方法,那样执行的就是子类的重写的方法了。模板设计的要点是,在父类中创建一个方法,然后再调用父类的抽象方法,子类必须要重写父类的抽象方法,以便实现你要的功能!

作者: 郑晓飞    时间: 2013-3-16 15:54
本帖最后由 郑晓飞 于 2013-3-16 15:59 编辑

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

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




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