Java核心(介面、繼承和多型-多型)
阿新 • • 發佈:2019-01-30
一、多型
利用多型可以使程式具有良好的擴充套件性,並可以對所有類物件進行通用的處理。
eg :定義一個平行四邊形的類 Parallelogram ,在類中頂一個 draw() 方法。
public class Parallelogram{
//例項化儲存平行四邊形物件的陣列物件
public void draw(Parallelogram p){ //定義 draw() 方法,引數為本類物件
//繪圖語句
}
}
如果需要頂一個繪製正方形的方法,通過定義一個正方形類來處理正方形物件,會出現程式碼冗餘的缺點;通過定義一個正方形和平行四邊形的綜合類,分別處理正方形和平行四邊形物件,也沒有太大意義。
如果定義一個四邊形類,讓它處理所有繼承該類的物件,根據“向上轉型”原則可以使每個繼承四邊形類的物件作為 draw() 方法的引數,然後在 draw() 方法中做一些限定就可以根據不同圖形類物件繪製相應的圖形,從而以更為通用的四邊形類來取代具有的正方形類和平行四邊形類。這樣處理能夠很好地解決程式碼冗餘問題,同時也易於維護,因為可以加入任何繼承父類的子類物件,而杜磊方法也無須修改。
eg :建立 Quadrangle 類,在分別建立兩個內部類 Square 和 Parallelogramgle ,它們都繼承了 Quadrangle 類。編寫 draw() 方法,該方法接收 Quadrangle 類的物件作為引數,即使用這兩個內部類的父類作為方法引數。在主方法中分別以兩個內部類的例項物件作為引數執行 draw() 方法。
public class Quadrangle{ //例項化儲存四邊形物件的陣列物件 private Quadrangle[] qtest = new Quadrangle[6]; private int nextIndex = 0 ; public void draw(Quadrangle q){ //定義 draw() 方法,引數為四邊形物件 if(nextIndex < qtest.length){ qtest[nextIndex] = q; System.out.println(nextIndex); nextIndex++; } } public static void main(String[] args){ //例項化兩個四邊形物件,用於呼叫 draw() 方法 Quadrangle q = new Quadrangle(); q.draw(new Square()); //以正方形物件為引數呼叫 draw() 方法 q.draw(new Parallelogramgle()); //以平行四邊形物件為引數呼叫 draw() 方法 } } class Square extends Quadrangle{ //定義一個正方形類,繼承四邊形類 public Square(){ System.out.println("正方形"); } } class Parallelogramgle extends Quadrangle{ //定義一個平行四邊形類,繼承四邊形類 public Parallelogramgle(){ System.out.println("平行四邊形"); } }
執行結果為 :
正方形
0
平行四邊形
1
以不同類物件為引數呼叫 draw() 方法可以處理不同的圖形問題。使用多型節省了開發和維護時間,因為程式設計師無須再所有的子類中定義執行相同功能的方法,避免了大量重複程式碼的開發,同時只要例項化一個繼承父類的子類物件即可呼叫相應的方法,這裡只要維護父類中的這個方法即可。