Go語(yǔ)言 重寫方法

類似于Java中的繼承,子類繼承并重寫父類的方法,Go語(yǔ)言也提供了這樣的實(shí)現(xiàn)。
Go語(yǔ)言中可以創(chuàng)建一個(gè)或者多個(gè)類型作為嵌入字段的自定義結(jié)構(gòu)體,任何嵌入類型中的方法都可以當(dāng)作該自定義結(jié)構(gòu)體自身的方法被調(diào)用,從而間接實(shí)現(xiàn)子類繼承父類的方式

在Go語(yǔ)言中,如果“子類”重寫了“父類”的成員方法,需要在子類的成員方法中調(diào)用基類的同名成員方法,一定要以

子類名.父類名.重寫方法名

這樣顯式的方法調(diào)用,而不是使用

子類名.重寫方法名

這種調(diào)用繼承方法的方式調(diào)用,這樣會(huì)出現(xiàn)無(wú)限循環(huán),即一直在調(diào)用子類的方法。

我們來(lái)看一個(gè)代碼示例

//創(chuàng)建一個(gè)Birds類
type Birds struct {
   Name string  //具名字段(聚合)
}
//Birds類有三個(gè)方法
func (bird *Birds)HasFoot()  {
   fmt.Println(bird.Name," has feet!")
}

func (bird *Birds)HasEye()  {
   fmt.Println(bird.Name," has eye!")
}

func (bird *Birds)HasFlying()  {
   fmt.Println(bird.Name," can flying!")
}
//創(chuàng)建一個(gè)Ostrich類,并繼承 Birds
type Ostrich struct {
   Birds //匿名字段(嵌入)
   Wings string  //具名字段(聚合)
}
//重寫B(tài)ase的Flying方法
func (ostrich *Ostrich)HasFlying()  {
   ostrich.Birds.HasFoot()   //顯示調(diào)用父類Birds的方法
   ostrich.Birds.HasEye()     //顯示調(diào)用父類Birds的方法
   ostrich.HasFoot()            //隱式調(diào)用父類Birds的方法
   ostrich.HasEye()              //隱式調(diào)用父類Birds的方法
   fmt.Println(ostrich.Name," can`t fly")
}

func main() {
   ostrich := new(Ostrich)
   ostrich.Name = "鴕鳥"
   ostrich.HasFlying() //調(diào)用子類的方法
}

下面會(huì)無(wú)限調(diào)用自己,形成死循環(huán)

func (ostrich *Ostrich)HasFlying()  {
    ostrich.HasFlying()  // 無(wú)限調(diào)用自己
    fmt.Println(ostrich.Name," can`t fly") // 永遠(yuǎn)不會(huì)執(zhí)行到這里
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,656評(píng)論 1 32
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,036評(píng)論 25 709
  • 幾個(gè)小的建議分享給大家,很實(shí)用: 一、靜心回神、找到自己的天賦才華。 二、高標(biāo)準(zhǔn)不速成。 三、戒生定,定生慧。 第...
    金融嘉嘉閱讀 494評(píng)論 0 0
  • 小女孩,不夠20個(gè) 寶寶和小動(dòng)物 植物和小飾品 水果等類 出生到成年的小女孩 蓮花
    暖暖百合花閱讀 241評(píng)論 2 1
  • 17歲,一個(gè)沒有煩惱的年紀(jì)。想如何任性,都會(huì)放任自己,勇敢追逐自己想要的。 17歲,涼夏羞澀卻為愛不顧一切 這個(gè)世...
    魔笛大公舉閱讀 840評(píng)論 7 6

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