十年網(wǎng)站開發(fā)經(jīng)驗 + 多家企業(yè)客戶 + 靠譜的建站團隊
量身定制 + 運營維護+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
創(chuàng)新互聯(lián)www.cdcxhl.cn八線動態(tài)BGP香港云服務器提供商,新人活動買多久送多久,劃算不套路!
本篇文章給大家分享的是有關如何使golang實現(xiàn)繼承,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
golang實現(xiàn)繼承的方法:Go采用組合的方式表達繼承的語義,代碼為【type Cat struct {p *Pet}func (c *Cat) Catch(){fmt.Println("*****")}】。
golang實現(xiàn)繼承的方法:
用封裝的話題上來,轉換成編程語言就是A把貓封裝成寵物了,B把狗封裝成寵物了,而 C需要寵物時,貓和狗都是寵物,最終結果要么是程序依舊正常運行,要么是程序意外掛掉了,因為很可能某一種寵物可能并不符合特定需求.
這種重復定義問題歸咎于封裝的標準不同,貓和狗兩者的封裝過程是獨立進行的,并沒有在一起商量著看看能不能繼續(xù)抽象出通用模型,混亂的封裝導致了貓是寵物,狗也是寵物.
這種多種相關概念的封裝很容易出現(xiàn)此類問題,所以適當進行統(tǒng)一分析繼續(xù)抽象出更高層次的封裝概念尤為重要,基于此,原來的封裝就能從這種通用概念中解放出來,僅僅保留自己的特色就好,大大簡化了模型的語義.
普通封裝的概念和更高層次的抽象封裝概念的關系就是面向對象中的繼承,即貓繼承于寵物,表示貓不但擁有寵物的特點還有貓自己的亮點.
對于狗也是一樣,狗是寵物,狗也是狗自己本身,體現(xiàn)了自己的特點.
Go
語言和其他主流的面向對象語言有所不同,Go 并不支持繼承特性,因而也沒有單繼承,多繼承,重寫方法等復雜概念.
那Go是如何描述這種普通封裝和抽象封裝之間的關系呢?
肯定不是把貓定義成寵物,狗也定義成寵物那種方式!
Go 實現(xiàn)繼承的語義不是通過 extends 關鍵字而是通過結構體組合的方式,請看相關代碼.
寵物就應該能文能武,這里不關心結構體的字段,因而并沒有定義相關字段.
type Pet struct { } func (p *Pet) Skill() { fmt.Println("能文能武的寵物") }
貓是能夠抓老鼠的寵物,Go采用組合的方式表達繼承的語義.
type Cat struct { p *Pet } func (c *Cat) Catch() { fmt.Println("老鼠天敵喵喵喵") }
狗是自帶導航功能的寵物,看我導盲犬的超能力!
type Dog struct { p *Pet } func (d *Dog) Navigate() { fmt.Println("自帶導航汪汪汪") }
接下來,C開始檢驗貓和狗作為寵物是否具備能文能武的基本要求,與此同時有沒有自身的特色?
func TestExtendInstance(t *testing.T) { p := new(Pet) d := new(Dog) d.p = p // 自帶導航汪汪汪 d.Navigate() // 能文能武的寵物 d.p.Skill() fmt.Println() c := new(Cat) c.p = p // 老鼠天敵喵喵喵 c.Catch() // 能文能武的寵物 c.p.Skill() }
上述結果證明,Go 語言雖然不支持 extends 關鍵字表達的繼承特性,但是采用組合的方式也是可以實現(xiàn)繼承語義的
以上就是如何使golang實現(xiàn)繼承,小編相信有部分知識點可能是我們?nèi)粘9ぷ鲿姷交蛴玫降?。希望你能通過這篇文章學到更多知識。更多詳情敬請關注創(chuàng)新互聯(lián)-成都網(wǎng)站建設公司行業(yè)資訊頻道。