【发布时间】:2020-01-31 11:32:11
【问题描述】:
在下面的代码sn -p -
type Input interface {
Name() string
}
type Abc interface {
Do(Input)
}
type InputImpl struct {
}
func (InputImpl) Name() string {
return "sample-impl"
}
type AbcImpl struct {
}
func (abcImpl *AbcImpl) Do(input Input){
// do something
}
AbcImpl struct 是Abc 接口的实现,但是像这样改变最后一个函数 -
func (abcImpl *AbcImpl) Do(input InputImpl){
// do something
}
现在AbcImpl 不再实现Abc,尽管InputImpl 正在实现Input 接口!
我是否遗漏了什么,或者必须具有 完全相同的签名(不是事件 Impls)作为合法实现的接口?
【问题讨论】:
-
是的,必须具有完全相同的签名。你有什么理由要这样定义它吗?
-
@bereal 好的,我试图在我的代码中的某处创建一个工厂,但我发现了这个问题。
-
请注意,这不适用于任何语言,因为现在 Do 不能再接受所有类型的 Input,但这是 Abc 接口所要求的。
-
这就是我提出问题后不久意识到的:)