多態(tài)首先是建立在繼承的基礎(chǔ)上的,先有繼承才能有多態(tài)。多態(tài)是指不同的子類在繼承父類后分別都重寫覆蓋了父類的方法,即父類同一個方法,在繼承的子類中表現(xiàn)出不同的形式。多態(tài)成立的另一個條件是在創(chuàng)建子類時候必須使用父類new子類的方式。
創(chuàng)新互聯(lián),專注為中小企業(yè)提供官網(wǎng)建設(shè)、營銷型網(wǎng)站制作、成都響應(yīng)式網(wǎng)站建設(shè)公司、展示型成都網(wǎng)站設(shè)計、成都做網(wǎng)站、外貿(mào)網(wǎng)站建設(shè)等服務(wù),幫助中小企業(yè)通過網(wǎng)站體現(xiàn)價值、有效益。幫助企業(yè)快速建站、解決網(wǎng)站建設(shè)與網(wǎng)站營銷推廣問題。
多態(tài)(Polymorphism)按字面的意思就是“多種狀態(tài)”。在面向?qū)ο笳Z言中,接口的多種不同的實(shí)現(xiàn)方式即為多態(tài)。引用Charlie Calverts對多態(tài)的描述——多態(tài)性是允許你將父對象設(shè)置成為一個或更多的他的子對象相等的技術(shù),賦值之后,父對象就可以根據(jù)當(dāng)前賦值給它的子對象的特性以不同的方式運(yùn)作(摘自“Delphi4?編程技術(shù)內(nèi)幕”)。
簡單的說,就是一句話:允許將子類類型的指針賦值給父類類型的指針。多態(tài)性在Object Pascal和C++中都是通過虛函數(shù)實(shí)現(xiàn)的。
拓展資料:
多態(tài)指同一個實(shí)體同時具有多種形式。它是面向?qū)ο蟪绦蛟O(shè)計(OOP)的一個重要特征。如果一個語言只支持類而不支持多態(tài),只能說明它是基于對象的,而不是面向?qū)ο蟮摹++中的多態(tài)性具體體現(xiàn)在運(yùn)行和編譯兩個方面。運(yùn)行時多態(tài)是動態(tài)多態(tài),其具體引用的對象在運(yùn)行時才能確定。編譯時多態(tài)是靜態(tài)多態(tài),在編譯時就可以確定對象使用的形式。
多態(tài):同一操作作用于不同的對象,可以有不同的解釋,產(chǎn)生不同的執(zhí)行結(jié)果。在運(yùn)行時,可以通過指向基類的指針,來調(diào)用實(shí)現(xiàn)派生類中的方法。
C++中,實(shí)現(xiàn)多態(tài)有以下方法:虛函數(shù),抽象類,覆蓋,模板(重載和多態(tài)無關(guān))。
OC中的多態(tài):不同對象對同一消息的不同響應(yīng).子類可以重寫父類的方法。
多態(tài)就是允許方法重名 參數(shù)或返回值可以是父類型傳入或返回。
多態(tài)也指生物學(xué)中腔腸動物的特殊的生活方式。水螅態(tài)與水母態(tài)的世代交替現(xiàn)象。
把不同的子類對象都當(dāng)作父類來看,可以屏蔽不同子類對象之間的差異,寫出通用的代碼,做出通用的編程,以適應(yīng)需求的不斷變化。
賦值之后,父類型的引用就可以根據(jù)當(dāng)前賦值給它的子對象的特性以不同的方式運(yùn)作。也就是說,父親的行為像兒子,而不是兒子的行為像父親。
使用繼承性的結(jié)果就是當(dāng)創(chuàng)建了一個類的家族,在認(rèn)識這個類的家族時,就是把子類的對象當(dāng)作基類的對象,這種認(rèn)識又叫作upcasting(向上轉(zhuǎn)型)。這樣認(rèn)識的重要性在于:我們可以只針對基類寫出一段程序,但它可以適應(yīng)于這個類的家族,因?yàn)榫幾g器會自動找出合適的對象來執(zhí)行操作。這種現(xiàn)象又稱為多態(tài)性。而實(shí)現(xiàn)多態(tài)性的手段又叫稱動態(tài)綁定(dynamic binding)。
簡單的說,建立一個父類對象的引用,它所指對象可以是這個父類的對象,也可以是它的子類的對象。java中當(dāng)子類擁有和父類同樣的函數(shù),當(dāng)通過這個父類對象的引用調(diào)用這個函數(shù)的時候,調(diào)用到的是子類中的函數(shù)。
類型 在變量名后邊
也可不顯式聲明類型, 類型推斷, 但是是靜態(tài)語言, name一開始放字符串就不能再賦值數(shù)字
方法,屬性 分開 方法名首字母大寫就是就是外部可調(diào)的
面向?qū)ο笤O(shè)計的一個重要原則:“優(yōu)先使用組合而不是繼承”
Dog 也是Animal , 要復(fù)用Animal 的屬性和方法,
只需要在結(jié)構(gòu)體 type 里面寫 Animal
入口也是main, 用用試試
多態(tài), 有這個方法就是這個接口的實(shí)現(xiàn), 具體的類 不需要知道自己實(shí)現(xiàn)了什么接口,
使用: 在一個函數(shù)調(diào)用之前加上關(guān)鍵字go 就啟動了一個goroutine
創(chuàng)建一個goroutine,它會被加入到一個全局的運(yùn)行隊列當(dāng)中,
調(diào)度器 會把他們分配給某個 邏輯處理器 的隊列,
一個邏輯處理器 綁定到一個 操作系統(tǒng)線程 ,在上面運(yùn)行g(shù)oroutine,
如果goroutine需要讀寫文件, 阻塞 ,就脫離邏輯處理器 直接 goroutine - 系統(tǒng)線程 綁定
編譯成同名.exe 來執(zhí)行, 不通過虛擬機(jī), 直接是機(jī)器碼, 和C 一樣, 所以非常快
但是也有自動垃圾回收,每個exe文件當(dāng)中已經(jīng)包含了一個類似于虛擬機(jī)的runtime,進(jìn)行g(shù)oroutine的調(diào)度
默認(rèn)是靜態(tài)鏈接的,那個exe會把運(yùn)行時所需要的所有東西都加進(jìn)去,這樣就可以把exe復(fù)制到任何地方去運(yùn)行了, 因此 生成的 .exe 文件非常大
比方一下:
你和你朋友都是煙鬼,
某日,你沒有帶煙, 而你朋友有n種煙,
你說: 來根煙,
朋友給你一根;
你通過煙的過濾嘴, 品出為白沙煙
你再要一根,
品出這次是芙蓉王,
再要一根,
品出這次是熊貓
...
上面描述的就是多態(tài)!
煙 a = 白沙
煙 b = 芙蓉王
煙 c = 熊貓
但發(fā)現(xiàn)沒有, 僅僅通過"煙"基類, 引用到不同的具體類對象,
就能讓你調(diào)用到不同的對象, 這就是多態(tài).
而煙到你嘴里[此時你還沒有發(fā)現(xiàn)是那種煙], 你僅僅憑借"吸"的動作,就識別出來,到底是哪種煙對象
這就是多態(tài)的懸機(jī).
多態(tài)須具備:
1. 基類 和各個子類
2. 基類 引用, 指向?qū)嵗淖宇悓ο?
再舉一個雞的例子,
雞是所有其它雞的基類, 定義了一個方法shape(), 此方法能指明雞的形態(tài). 所有的子類[火雞,山雞,田雞等],都有這個shape方法, 表明自己的形態(tài),
如果用下面的方法定義我需要具體的雞,
[基類 引用 = 實(shí)現(xiàn)類的對象]
for example:
雞 a = new 火雞();
雞 a = new 田雞();
雞 a = new 山雞();
雞 a = new 母雞();
當(dāng)我使用的時候, 我采用 a 這個引用,
a.shape(), 就會得到雞的形態(tài).
如果我定義的是
雞 a = new 火雞();
那么a.shape得到的是火雞的形態(tài), 而不需要用具體的
火雞 a = new 火雞(); 再通過a.shape得到火雞的形態(tài)
看【Go語言實(shí)戰(zhàn)】這本書第二遍了,看第一遍的時候只是留下個印象,為了加深記憶以及方便回顧,把自己的理解寫出來,僅供參考,Go Go Go,開始
接口是用來定義行為的類型。這些被定義的行為不由接口直接實(shí)現(xiàn),而是通過方法由用戶 定義的類型實(shí)現(xiàn)。如果用戶定義的類型實(shí)現(xiàn)了某個接口類型聲明的一組方法,那么這個用戶定 義的類型的值就可以賦給這個接口類型的值。這個賦值會把用戶定義的類型的值存入接口類型 的值。
1、如果參數(shù)類型是指針,那么在調(diào)用的時候也必須傳遞指針地址,因?yàn)榫幾g器不是總能自動獲取一個值的地址
2、如果參數(shù)類型是值,那調(diào)用的時候傳值或者指針都可以,因?yàn)橥ㄟ^指針可以獲取到對應(yīng)的值
1、定義一個接口,接口中定義一個方法,所有想要實(shí)現(xiàn)該接口的類型,必須先實(shí)現(xiàn)接口中的方法
2、定義一個類型,并為該類型以接收者方式實(shí)現(xiàn)【步驟1】中的接口方法
3、聲明一個多態(tài)方法,接收的參數(shù)類型為【步驟1】中定義的接口類型
4、調(diào)用該多態(tài)方法,并把【步驟2】中定義的類型作為參數(shù)傳遞給【步驟3】中聲明的多態(tài)方法,由多態(tài)方法來調(diào)用接口方法
網(wǎng)頁標(biāo)題:go語言多態(tài)什么意思 go語言 多態(tài)
本文鏈接:http://www.chinadenli.net/article34/dddssse.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導(dǎo)航、服務(wù)器托管、App設(shè)計、網(wǎng)站改版、微信公眾號、定制網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)