一、抽象Abstract
1.什么时候应该使用抽象类呢?
对于父类中某些方法不能确定时,就可以用abstract修饰该方法,把这个方法变成抽象方法,具体的功能由继承它的子类实现。
2.如果用abstract修饰一个类,那么这个类就是抽象类,子类要实现这个抽象类的全部抽象方法,否则只能将子类也定义为抽象类。
3.抽象类不可以被实例化, abstract只能用于修饰类和方法。
4.抽象类可以不包含抽象方法,但是一个类包含了抽象方法,那么就一定要定义为抽象类。
5.因为抽象方法的设计就是为了被子类重写,所以抽象方法不能被private、final、static修饰
二、模板模式
1.顾名思义,模板就是做一个参考的作用。
2.设计一个算法的骨架,具体的功能由继承它的子类来实现。Java设计模式中的模板模式是对抽象类的较好应用。
3.优点:
(1)封装不变部分,扩展可变部分。 (2)提取公共代码,便于维护。 (3)行为由父类控制,子类实现。
4.缺点:
(1)类的数目增加 (2)增加了系统实现的难度 (3)当为父类增加新的抽象方法时,要修改所有子类不易于维护
5.使用场景:
(1)有多个子类共有的方法,且逻辑相同。 (2)重要的、复杂的方法,可以考虑作为模板方法。
6.设计一个具体的模板,来完成对算法的运行时间统计
public abstract class AbstractTemplate {
public abstract void job();
public void calculateTime(){
long start = System.currentTimeMillis();
job();
long end = System.currentTimeMillis();
System.out.println("程序的执行时间为: " + (end - start));
}
}
- Java的System类提供了一个获取系统当前时间的静态方法
currentTimeMillis [通过类名直接调用即可] - 这个时间精确到毫秒,但是如果数据规模比较小的情况下,可能会输出0毫秒
class BubbleSort{
int [] arr = {100, 2, 14, 15, 3, 75, 69};
public void job(){
for(int i = 0; i < arr.length(); i++){
for(int j = 0; j < arr.length - i - 1; j++){
if(arr[i] > arr[j]){
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
}
}
class AddCalcaulate{
public void job(){
int sum = 0;
for(int i = 1; i <= 10000; i++){
sum += i;
}
}
}
?? 创建一一个实现类
public class Test{
public static void main(String [] args){
Bubble b = new Bubble();
b.calculateTime();
AddCalculate a = new AddCalculate();
a.calculateTime();
}
}
|