抽象類的做用:模板java
一、從語義的角度看,抽象類是從多個具體類中抽象出來的父類,具備更高層次的抽象this
二、從多個具備相同特徵的類中抽象出一個抽象類,以這個抽象類做爲其子類的模板,從而避免了其子類設計的隨意性設計
三、抽象類體現的就是一種模板模式的設計,抽象類做爲多個子類的通用模板,子類在抽象類的基礎上進行擴展、改造,但子類從總體上會大體保留抽象類的行爲方式3d
下面代碼展現的是另外一種抽象類的模板使用樣式:對象
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()); } }
運行結果:blog
如上代碼中:SpeedMeter 類裏提供了獲取速度表的通用方法,可是具體實現細節則推遲到了其子類 CarSpeedMeter 中來實現,這也是一種典型的模板模式get
總結:模板
模板模式在面向對象的軟件中很經常使用,其原理簡單,實現也簡單,其一些簡單規則以下:class
一、抽象父類能夠只定義須要使用的某些方法,把不能實現的部分抽象成抽象方法留給子類去實現基礎
二、父類中可能包含須要調用其餘系列方法的方法,這些被調用的方法既能夠被父類實現,也能夠經過抽象方法的方式由子類來實現