Go中struct结构体实现’‘继承’’
- 第一种 使用包含的方式
package main
import (
"fmt"
)
type person struct{}
func (p *person) speak() {
fmt.Println("speak in person")
}
// Admin exported
type Admin struct {
person
a int
}
func main() {
a := new(Admin)
// 直接调用内部struct的方法
a.speak()
// 间接调用内部stuct的方法
a.person.speak()
}
当person被嵌套到Admin中后,Admin就拥有了person中的属性,包括方法speak()。所以,a.speak()和a.person.speak()都是可行的。
如果Admin也有一个名为speak()的方法,那么Admin的speak()方法将掩盖内部struct的person的speak()方法。所以a.speak()调用的将是属于Admin的speak(),而a.preson.speak()将调用的是person的speak()。
验证如下:
func (a *Admin) speak() {
fmt.Println("speak in Admin")
}
func main() {
a := new(Admin)
// 直接调用内部struct的方法
a.speak()
// 间接调用内部stuct的方法
a.person.speak()
}
输出结果为:
speak in Admin
speak in person
- 第二种 指针 指向相当struct 于链表
package main
import (
"fmt"
)
type person struct {
name string
age int
}
type Admin struct {
people *person //指向
salary int
}
func main() {
// 构建Admin实例
a := new(Admin)
a.salary = 2300
a.people = new(person)
a.people.name = "longshuai"
a.people.age = 23
// 或a := &Admin{&person{"longshuai",23},2300}
// 调用属于person的方法speak()
a.people.speak()
}
func (p *person) speak() {
fmt.Println("speak in person")
}
版权声明:本文为weixin_43895671原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。