抽象类的作用:模板
1、从语义的角度看,抽象类是从多个具体类中抽象出来的父类,具有更高层次的抽象
2、从多个具有相同特征的类中抽象出一个抽象类,以这个抽象类作为其子类的模板,从而避免了其子类设计的随意性
3、抽象类体现的就是一种模板模式的设计,抽象类作为多个子类的通用模板,子类在抽象类的基础上进行扩展、改造,但子类从整体上会大致保留抽象类的行为方式
下面代码展示的是另一种抽象类的模板使用样式:
abstract class SpeedMeter{
//-转速
private double trunRate;
public SpeedMeter(){
}
//-定义一个获取半径的 抽象方法
public abstract double getRadius();
public void setTrunRate(double trunRate){
this.trunRate=trunRate;
}
//-定义一个获取速度的方法,调用 还未实现的 获取半径的抽象方法
public double getSpeed(){
return Math.PI*2*getRadius()*trunRate;
}
}
public class CarSpeedMeter extends SpeedMeter{
//-实现父类的抽象方法 返回半径
public double getRadius(){
return 0.25;
}
public static void main(String[] args){
CarSpeedMeter car=new CarSpeedMeter();
car.setTrunRate(25);
System.out.println(car.getSpeed());
}
}
运行结果:
如上代码中:SpeedMeter 类里提供了获取速度表的通用方法,但是具体实现细节则推迟到了其子类 CarSpeedMeter 中来实现,这也是一种典型的模板模式
总结:
模板模式在面向对象的软件中很常用,其原理简单,实现也简单,其一些简单规则如下:
1、抽象父类可以只定义需要使用的某些方法,把不能实现的部分抽象成抽象方法留给子类去实现
2、父类中可能包含需要调用其他系列方法的方法,这些被调用的方法既可以被父类实现,也可以通过抽象方法的方式由子类来实现