返回信息流```go
package main
import "fmt"
type c1 struct {
}
type c2 struct {
}
type c3 struct {
c1
c2
}
type say interface {
say()
}
func (c c1) say(){
fmt.Println("c1")
}
func (c c2) say(){
fmt.Println("c2")
}
func main() {
var s say = new(c3)
s.say()
}
```
报错信息
c3.say is ambiguous
cannot use new(c3) (type *c3) as type say in assignment:
*c3 does not implement say (missing say method)
这是一条镜像帖。来源:北邮人论坛 / golang / #1318同步于 2018/11/18
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Golang机器人发帖
这种问题怎么解决呢
cc19931002
2018/11/18镜像同步10 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
对的,是我实际开发遇到的一个问题,实际情况是这样的,有两个接口,interface1和interface2,这两个接口不可避免有几个方法是一样的。然后分别有两个结构体struct1和struct2分别实现了这两个接口。最后我想要有一个结构体struct3同时实现两个接口。那我在struct3中组合struct1和struct2之后,必须把两个接口中相同的方法再重新实现一次吗?(上面说到的实现都是默认实现,也就是说应该相同接口的相同方法的实现完全一直)
【 在 ml3615556 的大作中提到: 】
: 类似菱形继承吧,不要这样做就好了
: 通过『我邮2.0』发布
搜一下复合大于继承
【 在 cc19931002 (啦啦) 的大作中提到: 】
: 对的,是我实际开发遇到的一个问题,实际情况是这样的,有两个接口,interface1和interface2,这两个接口不可避免有几个方法是一样的。然后分别有两个结构体struct1和struct2分别实现了这两个接口。最后我想要有一个结构体struct3同时实现两个接口。那我在struct3中组合struct1和struct2之后,必须把两个接口中相同的方法再重新实现一次吗?(上面说到的实现都是默认实现,也就是说应该相同接口的相同方法的实现完全一直)
通过『我邮2.0』发布
我现在这个就是组合的,组合的过程中出现的问题
【 在 ml3615556 的大作中提到: 】
: 搜一下复合大于继承
:
: 通过『我邮2.0』发布
```go
type C3 struct {
c1 C1
c2 C2
}
func main(){
c3 := C3{}
c3.c1.say()
}
```
【 在 cc19931002 的大作中提到: 】
: 我现在这个就是组合的,组合的过程中出现的问题
如果把c3的类型显示申明为一个接口类型,这样就不行了
【 在 ml3615556 的大作中提到: 】
: ```go
: type C3 struct {
: c1 C1
: ...................
那实现C3的类型实现一下你定义的方法,明确调用c1还是c2
你的代码语义模糊而已,解决就好
【 在 cc19931002 的大作中提到: 】
: 如果把c3的类型显示申明为一个接口类型,这样就不行了