不積跬步,無以至千裡。關注我,每天三分鐘,帶你輕鬆掌握一個Java相關知識點。
多態顧名思義,指多種狀態。一個東西被人類創造,一定為了解決某種問題的,那麼多態存在是為了解決什麼問題呢?換言之,多態存在的意義是什麼?
假如我們想要寫一個讀小說的場景:
先寫兩個個小說類:
再寫一個讀書的人的類,這裡我們通過方法的重載,來支持該人閱讀不同的小說。
最後寫一個Main方法
運行結果:
小夥伴們可能都發現了,這樣設計程序有很大的問題,一兩本書可能沒差別,但以後可能會讀成千上萬本書,如果在Persion類中一直添加重載方法是非常可怕的。然而我們怎麼利用多態來解決這個問題呢?
我們可以想一下,人類read這個方法就是接受小說這個對象,那麼我們能不能所有的小說抽象成一個類,並通過對這個類的不同實現來實現一種運行層面的動態呢?
我們嘗試下這麼做:
運行結果:
看!我們以後再也不用打開Persion類無限重載方法了,只要有新的小說,我們就讓它繼承Book類,重寫書名,再替換紅框部分就可以了。
通過上述例子,我們能總結出多態存在的意義有哪些了:
1.省心了。我們不用再去關心到底要讀那一本書了,只要把book對象傳進來,具體那一本根本不關心。這也就是大家常說的不關心子類具體情況,可以無腦用父類,等用到子類特有的方法的時候,強轉一下就行。
2.省力了。我們在拓展小說的時候,不用再想getName怎麼建立了,直接重寫就可以。這個例子中可能不明顯,在現實開發中,父類抽象出的方法可能有很多,這個時候就能省不少力氣。
3.拓展性高了。這個需要自己領會,要把代碼寫靈活的方式方法有很多,好多的設計模式就是為了做成這件事,多態的存在也是有這個層面的意思,你會發現它把子類放開了,你可以用這個父類放飛自我,搞一些奇奇怪怪的書來讀(繼承)。
但是,在使用多態的時候,也不是為所欲為,它有幾個必要條件:
1.繼承。你必須有父類子類這種關係,才能搞多態。
2.重寫。重寫的意義就是你之所以弄出個子類,無外乎父類不能滿足,所以重寫父類不滿足的那一部分意義就在這。
3.轉型。你需要把子類對象交給父類引用,才能子類父類都使用。
以上就是今天的知識點,各位小夥伴get到嗎?創作不易,望各位多多點讚收藏,有什麼建議可以留言告訴我,我會積極採納!