共計(jì) 857 個(gè)字符,預(yù)計(jì)需要花費(fèi) 3 分鐘才能閱讀完成。
Go 語言中沒有面向?qū)ο缶幊讨械睦^承概念,但可以通過結(jié)構(gòu)體嵌套和組合的方式來實(shí)現(xiàn)類似的效果。
可以通過在一個(gè)結(jié)構(gòu)體中嵌入另一個(gè)結(jié)構(gòu)體來實(shí)現(xiàn)繼承的效果。子結(jié)構(gòu)體可以訪問父結(jié)構(gòu)體中的字段和方法。
下面是一個(gè)簡(jiǎn)單的例子:
package main
import "fmt"
// 父結(jié)構(gòu)體
type Parent struct {name string
age int
}
// 父結(jié)構(gòu)體方法
func (p *Parent) sayHello() {fmt.Println("Hello, I'm", p.name)
}
// 子結(jié)構(gòu)體
type Child struct {Parent // 嵌入父結(jié)構(gòu)體
school string
}
// 子結(jié)構(gòu)體方法
func (c *Child) goToSchool() {fmt.Println(c.name, "is going to", c.school)
}
func main() {// 創(chuàng)建子結(jié)構(gòu)體對(duì)象
child := Child{
Parent: Parent{name: "Tom",
age: 10,
},
school: "ABC School",
}
// 訪問父結(jié)構(gòu)體字段和方法
fmt.Println(child.name) // 輸出:Tom
fmt.Println(child.age) // 輸出:10
child.sayHello() // 輸出:Hello, I'm Tom
// 訪問子結(jié)構(gòu)體字段和方法
fmt.Println(child.school) // 輸出:ABC School
child.goToSchool() // 輸出:Tom is going to ABC School
}
在上面的例子中,我們定義了一個(gè)父結(jié)構(gòu)體 Parent
,包含了一個(gè)字段name
和一個(gè)方法 sayHello
。然后定義了一個(gè)子結(jié)構(gòu)體Child
,通過嵌入父結(jié)構(gòu)體來實(shí)現(xiàn)繼承。子結(jié)構(gòu)體還定義了一個(gè)自己的字段school
和方法goToSchool
。
在 main
函數(shù)中,我們創(chuàng)建了一個(gè)子結(jié)構(gòu)體對(duì)象child
,然后可以通過對(duì)象訪問父結(jié)構(gòu)體的字段和方法,也可以訪問子結(jié)構(gòu)體自己的字段和方法。
丸趣 TV 網(wǎng) – 提供最優(yōu)質(zhì)的資源集合!
正文完