多態(tài)消息的理解

對象有一個(gè)奇妙的機(jī)制就是多態(tài)消息。

剛看到這句話時(shí)就一個(gè)想法:什么鬼?后來才知道其實(shí)就是多態(tài)的應(yīng)用。

那么多態(tài)消息是什么呢?

消息是一個(gè)術(shù)語:

指一個(gè)對象調(diào)用另一個(gè)對象的成員函數(shù)(c++)或者方法(java)。

多態(tài)機(jī)制有兩種:

一種是靜態(tài)多態(tài),即編譯時(shí)就已經(jīng)確定,運(yùn)行時(shí)調(diào)用的是已經(jīng)確定的方法(消息),常見的就是重載:方法名相同,參數(shù)不同。

一種是動態(tài)多態(tài),即編譯時(shí)不確定調(diào)用哪個(gè)方法,一直延遲到運(yùn)行到那個(gè)地方才能確定,因此多態(tài)方法又叫延遲方法。

多態(tài)有兩種實(shí)現(xiàn)方式:

一種是子類繼承父類。

一種是類實(shí)現(xiàn)接口。

兩種方法的核心目的都是以一個(gè)消息(調(diào)用一個(gè)方法方法)來實(shí)現(xiàn)運(yùn)行時(shí)的不同效果,方式為:對父類方法的復(fù)寫或?qū)涌诜椒ǖ膶?shí)現(xiàn)。

因此總結(jié)出使用多態(tài)有一個(gè)法則:

聲明的總是父類型或者接口類型,創(chuàng)建的時(shí)實(shí)際類型。舉例來說用多態(tài)創(chuàng)建一個(gè)arraylist,就應(yīng)該用這樣的語句

List list = new ArrayList(),

而不是

ArrayList list = new ArrayList()。

定義方法參數(shù)也應(yīng)該優(yōu)先使用父類類型或接口類型,比如一個(gè)方法定義參數(shù)是list數(shù)組,那就應(yīng)該用List而不是ArrayList,這樣才符合多態(tài)機(jī)制。

為什么?因?yàn)檫@樣聲明最大的好處在于結(jié)構(gòu)的靈活性:假如某一天我認(rèn)為ArrayList的特性無法滿足我的需求,需要用LinkedList來代替它,那么只需要把對象創(chuàng)建的地方new ArrayList()改為new LinkedLIst()即可,其他代碼一概不動。不然可能就要改變這個(gè)函數(shù)的傳參或者重載這個(gè)函數(shù),將大大增加代碼量和結(jié)構(gòu)的臃腫。

所以反過來就可以得到多態(tài)的作用:

對結(jié)構(gòu)和設(shè)計(jì)的復(fù)用。定義功能和組件時(shí)定義接口,實(shí)現(xiàn)留在之后的流程中。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,816評論 18 399
  • 1.import static是Java 5增加的功能,就是將Import類中的靜態(tài)方法,可以作為本類的靜態(tài)方法來...
    XLsn0w閱讀 1,437評論 0 2
  • 面向?qū)ο笾饕槍γ嫦蜻^程。 面向過程的基本單元是函數(shù)。 什么是對象:EVERYTHING IS OBJECT(萬物...
    sinpi閱讀 1,228評論 0 4
  • (一)Java部分 1、列舉出JAVA中6個(gè)比較常用的包【天威誠信面試題】 【參考答案】 java.lang;ja...
    獨(dú)云閱讀 7,275評論 0 62
  • 我坐在小婷的床邊靜靜地看著她,這個(gè)讓我愿意為之付出一切的女人這一刻就這么安靜的躺在病床上。此刻的她已不能再像以前一...
    闌塵閱讀 533評論 0 4

友情鏈接更多精彩內(nèi)容