组合

...

初始化匿名成员为接口的结构体,初始化参数需要是指针,ide帮忙解决了,结构体,可以直接调用初始化参数实现的方法,也就是接口内的方法

package main

import "log"

type Bird interface {
	Biss()
}
type Lan struct{}

func (l *Lan) Biss() {
	log.Println("Lan Biss")
}

type Hus struct {
	Bird
}

func main() {
	var l Lan = Lan{}
	var hus Hus = Hus{&l}
	hus.Biss()

	l2 := new(Lan)
	var hus1 Hus = Hus{l2}
	hus1.Biss()

}

...

结构体A内嵌匿名结构体b和c,则A使用b和c初始化后 ,可以直接调用b和c实现的方法

当b c绑定同名函数时,A不能调用该方法,不同名的不收该限制 

 

package main

import "log"

type Bird struct {
	Name string
	Age  int
}

type Dog struct {
	Name string
	Age  int
}

func (b *Bird) Say() {
	log.Println("bird say")
}

func (d *Dog) Eat() {
	log.Println("Dog eat")
}

type Ani struct {
	Bird
	Dog
}

func main() {

	b := Bird{"bb", 11}
	d := Dog{"dd", 11}
	a := Ani{b, d}
	a.Eat()
}

  

 

posted @ 2021-12-30 16:51  voh99800  阅读(28)  评论(0编辑  收藏  举报