废话不说,直接上代码
type A struct {
m_a string
}
type B struct {
A
m_b string
}
type C struct {
B
m_b string
m_c string
}
func (a *A) showA() { fmt.Println(a.m_a)}
func (b *B) showB() { fmt.Println(b.m_b)}
func (c *C) showB() { fmt.Println(c.m_b)}
func (c *C) showC() { fmt.Println(c.m_c)}
func main() {
c := C{m_b: "c-b",m_c: "c-c",}
c.B.m_b = "b-b" // 此处如果屏蔽,则c.B.showB()打印为空字符串
c.m_a = "c-a"
c.A.showA()
c.showA()
c.A.m_a = "a-a"
c.A.showA()
c.showA()
c.B.showB()
c.showB()
}
运行结果依次是
c-a
c-a
a-a
a-a
b-b
c-b
由此可以看出,结构体继承时,可以直接使用c.showA()或c.showB()来访问继承下来的属性,且B与A中的属性依然保存,可以通过c.A.showA()和c.B.showB()来访问,且与c中的数据单独存放