go语言中结构体的继承(组合)详细讲解
在go中,结构体的继承是通过嵌入来实现的吗?
不是。 Go 没有继承 ,结构体嵌入本质上是一种 组合 ,
只是它恰好能"模拟"出类似继承的效果。
也就是说:go没有继承,只有组合。
通过结构体嵌套实现继承(1)
我们想用A结构体来继承B结构体的所有字段,
我们可以通过组合B来实现。
最后通过 %#v 打印出A结构体的所有字段,
package main
import (
"fmt"
)
type Address struct {
City string
Phone string
}
type User struct {
Name string
Age int
// 通过组合实现继承的效果,
// 这样这个User结构体就包含了Address结构体的所有字段
Address Address
}
func main() {
// 实例化结构体
user := User{
Name: "张三",
Age: 18,
Address: Address{
City: "xxx城市",
Phone: "13800000000",
},
}
fmt.Printf("结构体User: %#v\n", user)
}
输出:
结构体User: main.User{Name:"张三", Age:18, Address:main.Address{City:"xxx城市", Phone:"13800000000"}}
给结构体添加方法的语法
func (变量 变量类型) 方法名(参数列表) 返回值类型 { ... }
这个变量的类型通过是结构体
通过结构体的嵌套实现继承(2)
现在我们想给A结构体添加一个方法,用于输出A结构体的所有字段。
让B结构体继承A结构体的字段和方法。同时B结构体也有自己的方法。
package main
import (
"fmt"
)
type Animal struct {
Name string
}
// 给Animal结构体添加一个方法Say,用于输出动物的名称
// 这样Animal结构体就有了自己的字段和方法
func (a Animal) Say() {
fmt.Printf("我是%s\n", a.Name)
}
type Dog struct {
Age int
// 通过组合实现继承的效果,
// 这样这个Dog结构体就包含了Animal结构体的所有字段和方法
Animal
}
// 给Dog结构体添加一个方法wang
func (d Dog) wang() {
fmt.Println("汪汪汪")
}
func main() {
dog := Dog{
Age: 1,
Animal: Animal{
Name: "旺财",
},
}
dog.Say()
dog.wang()
}
输出:
我是旺财
汪汪汪
作者:流年少年
出处:https://www.cnblogs.com/ishoulgodo/
本文版权归作者所有,欢迎转载,未经作者同意须保留此段声明,在文章页面明显位置给出原文连接
如果文中有什么错误,欢迎指出。以免更多的人被误导。
出处:https://www.cnblogs.com/ishoulgodo/
想问问题,打赏了卑微的博主,求求你备注一下的扣扣或者微信;这样我好联系你;(っ•̀ω•́)っ✎⁾⁾!
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,或者关注博主,在此感谢!
万水千山总是情,打赏5毛买辣条行不行,所以如果你心情还比较高兴,也是可以扫码打赏博主(っ•̀ω•́)っ✎⁾⁾!
想问问题,打赏了卑微的博主,求求你备注一下的扣扣或者微信;这样我好联系你;(っ•̀ω•́)っ✎⁾⁾!
支付宝
微信
如果文中有什么错误,欢迎指出。以免更多的人被误导。

浙公网安备 33010602011771号