赞
踩
随着继承层次中一个个新子类的定义,类变得越来越具体,而父类则更一般,更通用。类的设计应该保证父类和子类能够共享特征。有时将一个父类设计得非常抽象,以至于它没有具体的实例,这样的类叫做抽象类。
抽象类: 被abstract修饰的类。
抽象方法: 被abstract修饰没有方法体的方法。
抽象类的语法格式:
[权限修饰符] abstract class 类名{
}
[权限修饰符] abstract class 类名 extends 父类{
}
//抽象方法的语法格式
[其他修饰符] abstract 返回值类型 方法名([形参列表]);
//注意:抽象方法没有方法体
抽象类体现的就是一种模板模式的设计,抽象类作为多个子类的通用模板,子类在抽象类的基础上进行扩展、改造,但子类总体上会保留抽象类的行为方式。
解决的问题:
示例1:
//模板方法
public abstract class Template {
public final void getTime(){
long start = System.currentTimeMillis();
this.code();
long end = System.currentTimeMillis();
System.out.println("耗时:" + (end - start));
}
public abstract void code();
}
//具体实现
public class SubTemplate extends Template {
//求2-100000之间的质数
@Override
public void code() {
int count = 0;
label:
for (int i = 2; i <= 100000; i++) {
for (int j = 2; j <= Math.sqrt(i); j++) {
if (i % j == 0) {
//结束【当前】最外层循环
continue label;
}
}
count++;
}
System.out.println("质数有:" + count);
}
}
public static void main(String[] args) {
Template subTemplate = new SubTemplate();
subTemplate.getTime();
}
示例2:
//模板方法
abstract class BankTemplateMethod {
// 具体方法
public void takeNumber() {
System.out.println("取号排队");
}
public abstract void transact(); // 办理具体的业务 //钩子方法
public void evaluate() {
System.out.println("反馈评分");
}
// 模板方法,把基本操作组合到一起,子类一般不能重写
public final void process() {
this.takeNumber();
this.transact();// 像个钩子,具体执行时,挂哪个子类,就执行哪个子类的实现代码
this.evaluate();
}
}
class DrawMoney extends BankTemplateMethod {
public void transact() {
System.out.println("我要取款!!!");
}
}
class ManageMoney extends BankTemplateMethod {
public void transact() {
System.out.println("我要理财!我这里有2000万美元!!");
}
}
//抽象类的应用:模板方法的设计模式
public class TemplateMethodTest {
public static void main(String[] args) {
BankTemplateMethod btm = new DrawMoney();
btm.process();
BankTemplateMethod btm2 = new ManageMoney();
btm2.process();
}
}
模板方法设计模式是编程中经常用得到的模式。各个框架、类库中都有他的影子,
常见的有:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。