概念:對於同一個指令(調用同一個名稱的方法),不一樣的方法給予不一樣的反應(不一樣的方法實現)spa
例如:老師給學生上課,當老師說下課時,不一樣的學生有不一樣的反應,有的學生上廁所、有的學生喝水,但老師下發的指令只有一個code
這就是多態,同一指令,不一樣的事物有不一樣的反應對象
規範(多態實現的前提):blog
1.必需要有繼承關係繼承
2.子類方法必須重寫父類方法class
3.父類引用指向子類對象(同一引用類型,使用不一樣的實例而執行不一樣的操做)擴展
1 public class DuoTai { 2 public static void main(String[] args) { 3 //父類引用指向子類對象 4 Father father = new Child(); 5 /** 6 * 因爲fun1在子類中沒有方法重寫,當調用fun1時只會調用父類中的fun1 7 * 子類中重寫了fun2,當執行到父類中fun1中的fun2時,就會執行子類中重寫的fun2 8 */ 9 father.fun1();//執行結果爲子類中的fun2 10 } 11 } 12 13 class Father{ 14 public void fun1(){ 15 fun2(); 16 } 17 18 public void fun2(){ 19 System.out.println("父類中的fun2"); 20 } 21 } 22 23 class Child extends Father{ 24 //方法重載 25 public void fun1(int i){ 26 System.out.println("子類中的fun1"); 27 } 28 //方法重寫 29 public void fun2(){ 30 System.out.println("子類中的fun2"); 31 } 32 }
如上代碼能夠體現出引用
當子類中沒有重寫父類中現有的方法時,多態調用的是父類中的方法方法
當子類中重寫了父類中的方法時,多態調用的是子類中的方法static
多態的目的:
爲了提升代碼的擴展性和維護性
方便代碼邏輯的編寫
多態的兩種表現形式:
1.父類做爲方法的參數
2.父類做爲方法的返回值類型
引用類型的轉換與基本類型的轉換相似:
父類轉成子類時要進行強制轉換,但在強制轉化前必定要先判斷父類引用指向的子類對象究竟是誰,若沒法肯定,在運行過程當中可能出錯
子類轉成父類時,直接自動轉換,不須要進行任何的判斷