溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何使golang實現(xiàn)繼承

發(fā)布時間:2020-07-21 09:16:23 來源:億速云 閱讀:207 作者:Leah 欄目:編程語言

本篇文章給大家分享的是有關(guān)如何使golang實現(xiàn)繼承,小編覺得挺實用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

golang實現(xiàn)繼承的方法:Go采用組合的方式表達繼承的語義,代碼為【type Cat struct {p *Pet}func (c *Cat) Catch(){fmt.Println("*****")}】。

golang實現(xiàn)繼承的方法:

用封裝的話題上來,轉(zhuǎn)換成編程語言就是A把貓封裝成寵物了,B把狗封裝成寵物了,而 C需要寵物時,貓和狗都是寵物,最終結(jié)果要么是程序依舊正常運行,要么是程序意外掛掉了,因為很可能某一種寵物可能并不符合特定需求.

這種重復(fù)定義問題歸咎于封裝的標準不同,貓和狗兩者的封裝過程是獨立進行的,并沒有在一起商量著看看能不能繼續(xù)抽象出通用模型,混亂的封裝導(dǎo)致了貓是寵物,狗也是寵物.

這種多種相關(guān)概念的封裝很容易出現(xiàn)此類問題,所以適當進行統(tǒng)一分析繼續(xù)抽象出更高層次的封裝概念尤為重要,基于此,原來的封裝就能從這種通用概念中解放出來,僅僅保留自己的特色就好,大大簡化了模型的語義.

普通封裝的概念和更高層次的抽象封裝概念的關(guān)系就是面向?qū)ο笾械睦^承,即貓繼承于寵物,表示貓不但擁有寵物的特點還有貓自己的亮點.

對于狗也是一樣,狗是寵物,狗也是狗自己本身,體現(xiàn)了自己的特點.

Go語言和其他主流的面向?qū)ο笳Z言有所不同,Go 并不支持繼承特性,因而也沒有單繼承,多繼承,重寫方法等復(fù)雜概念.

那Go是如何描述這種普通封裝和抽象封裝之間的關(guān)系呢?

肯定不是把貓定義成寵物,狗也定義成寵物那種方式!

Go 實現(xiàn)繼承的語義不是通過 extends 關(guān)鍵字而是通過結(jié)構(gòu)體組合的方式,請看相關(guān)代碼.

寵物就應(yīng)該能文能武,這里不關(guān)心結(jié)構(gòu)體的字段,因而并沒有定義相關(guān)字段.

type Pet struct {
}
func (p *Pet) Skill() {
    fmt.Println("能文能武的寵物")
}

貓是能夠抓老鼠的寵物,Go采用組合的方式表達繼承的語義.

type Cat struct {
    p *Pet
}
func (c *Cat) Catch() {
    fmt.Println("老鼠天敵喵喵喵")
}

狗是自帶導(dǎo)航功能的寵物,看我導(dǎo)盲犬的超能力!

type Dog struct {
    p *Pet
}
func (d *Dog) Navigate() {
    fmt.Println("自帶導(dǎo)航汪汪汪")
}

接下來,C開始檢驗貓和狗作為寵物是否具備能文能武的基本要求,與此同時有沒有自身的特色?

func TestExtendInstance(t *testing.T) {
    p := new(Pet)
    d := new(Dog)
    d.p = p
    // 自帶導(dǎo)航汪汪汪
    d.Navigate()
    // 能文能武的寵物
    d.p.Skill()
    fmt.Println()
    c := new(Cat)
    c.p = p
    // 老鼠天敵喵喵喵
    c.Catch()
    // 能文能武的寵物
    c.p.Skill()
}

上述結(jié)果證明,Go 語言雖然不支持 extends 關(guān)鍵字表達的繼承特性,但是采用組合的方式也是可以實現(xiàn)繼承語義的


以上就是如何使golang實現(xiàn)繼承,小編相信有部分知識點可能是我們?nèi)粘9ぷ鲿姷交蛴玫降摹OM隳芡ㄟ^這篇文章學(xué)到更多知識。更多詳情敬請關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI