關於Java的多態,首先問自己2個問題:什麼是多態?多態解決的問題是什麼?
老規矩先來一個簡單的小測試,程序的執行結果是什麼?

你的回答是否正確呢?如果不完全對咱們就接著往下看,先回答最開始的兩個問題。
多態是相同的行為但是卻有不同的表現,比如吃東西,羊吃草,狼吃肉。那為什麼用多態呢?
多態還是有些好處的,多態分離做什麼和怎麼做,也就是接口的定義和實現的分離。這樣不但能改善代碼結果和提高閱讀性,還能構建可擴展的應用程式。
實現一個多態的例子
創建動物的基類,定義一個吃東西的方法eat。創建一個類羊並繼承動物類,重寫方法eat。在創建一個狼並基礎動物類,也重寫方法eat。

從上面的例子看到testEat方法中的參數是動物類,在運行的時候參入的是羊和狼,最後執行的是羊和狼的eat方法,這個就是多態。
多態的必要條件為:
繼承(或者實現接口)。重寫基類的方法(或者實現接口的方法),這個強調的是方法,變量不能實現多態。父類的引用指向子類(或者實現類),通過運行時決定傳入的是哪個具體的類型。構造器和多態
構造器不同於其他的方法,它實際上是隱式的靜態方法,不具有多態性。但是又必須要了解在繼承中構造方法的初始化順序。
在實例化子類的時候,會檢查是否有父類,如果有就會先初始化父類,以此向上查找並初始化。
如果我們在沒有初始化的時候調用多態的方法會發生什麼?開始的測試的結果已經說明問題了,為什麼會id是null,而不是1,因為類初始化之前對象的引用為null,基本類型的值為0。
歡迎留言討論,如果有任何錯誤,請批評指正,謝謝!