1、多態是什么?
多態在特性方面還是比較理解的,指的是同一個對象在不同的時刻可以表現出不同的狀態,要體現出面向對象的多態性,必須滿足的條件有幾點:
-
-
- 必須有繼承關系。
- 必須有方法覆蓋。
- 必須有父類引用指向子類對象。
-
多態中涉及到一個非常重要的概念,叫做編譯類型和運行時類型,簡單的理解就可以理解為作為引用的類型就是編譯類型,實際的對象類型就是運行時類型,當然這樣理解是不完全正確的。
引用類型的變量在編譯階段只能訪問編譯類型的相關成員,如果想要訪問真實類型的對象成員的話必須經過強制轉型(向下轉型),否則會發生編譯錯誤。這里有一個需要注意的點,引用類型的成員變量是不具有多態性的,也就是說想通過多態來訪問運行時類型對象的成員變量是無法訪問的,就算有同樣的屬性,訪問的一定會是編譯時類型對象的成員變量。
多態的概念理解起來還是不困難的,但是多態底層的實現是很復雜的,涉及到了虛擬機的動態綁定等概念,雖然現在有所了解,但是理解的不是很透徹,等后面再閱讀更多的一些相關資料后再來填這個坑。
2、多態帶來了什么好處?
多態的存在使Java代碼擁有了更多的靈活性,可以用同一個引用訪問不同的對象,也使代碼擁有了更高的擴展性,如使用父類作為方法形參,實際調用時傳入該類的任意子類作為參數都是可以的。
