黑马程序员技术交流社区
标题:
关于模板设计方法的问题
[打印本页]
作者:
张亚青
时间:
2013-3-16 06:47
标题:
关于模板设计方法的问题
1、对于静态方法,怎么设计成模板?
如下面代码:我想要在main函数中直接调用showTime()方法,则showTime()方法必须是静态的,从而模板类ShowTime中的方法showTime()和run()也必须是静态的,但是如果定义成abstract static void run();则会报错,因为abstract和static不能同时存在,请问该怎么办?
package chapter12;
import java.io.*;
class CopyMedia extends ShowTime
{
public static void main(String [] args)
{
showTime();
}
public static void run()
{
try
{
copyMp3();
}
catch (Exception e)
{
e.printStackTrace();
}
}
//复制图片文件
public static void copyPic() throws IOException
{
}
//复制mp3文件
public static void copyMp3() throws IOException
{
}
}
//下面是显示程序运行时间的模板类
abstract class ShowTime
{
public static void showTime()
{
long start =System.currentTimeMillis();
run();
long end =System.currentTimeMillis();
System.out.println((end-start)+"毫秒");
}
abstract static void run();//这里编译的时候会报错,abstract和static 不能同时存在
}
复制代码
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