组合接口中其他接口方法重名

来源:1-5 接口的组合

qq_永远的稻米_0

2022-06-03 09:47:14

当接口Retiever,接口Poster,都包含同一个方法Post,接口C(接口C是A、B的组合)当我们使用接口C时,是和JAVA的一种语法根据参数不同去区分用了哪个接口的方法,还是说方法不同入参会影响具体用到了哪个接口?

相关截图:

https://img.mukewang.com/climg/62995f650948953b11560692.jpg

如上图,两个接口都有Post,我现在的理解是,参数定的不一样,就会实现了不同的接口,但是实际使用中,应该是,接口中方法必须实现,不然就会报错,我一开始理解的接口的实现是抽象方法,但好像不是,实现过程中,必须包含每一个方法,Post,Get,不然就报错,那我现在的理解就成了,实际上,实现者需要实现接口中所有方法,组合接口C如果实现,是不是也得实现Retiever,Poster两个接口所有方法?这是第二个问题,

https://img.mukewang.com/climg/62996305091f7e0f13700244.jpg

反看第一个问题,Retiever,Poster两个接口相同方法,不同参数,接口C组合之后,好像实现者这边又不能同方法名Post,只能存在一个,也就是说实现的时候我只能实现Retiever,Poster接口中一个,如何实现相同方法名Post的组合接口C呢?第三个问题

写回答

1回答

慕移动7148688

2022-06-05

这几个问题其实是统一的,go语言不允许函数重载,也就是说,不允许在同一类型中定义同名但不同参数类型的方法。你定义两个接口,然后在两个接口中各自声明一个post(url string) string方法,接着组合两个接口,这没有问题,go语言认为这是一个方法,只要你的类型实现接口中的方法,就可以看做是该接口类型。如果你在一个接口中声明post(url string) string方法,另一个接口中声明post(url string,form map[string]string) string方法,然后用第三个接口来组合前两个接口,这时候ide就直接报方法重复定义的错误了。

0

0 学习 · 1399 问题

查看课程