猿问

接口和实现

在以下代码片段中 -


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

}

AbcImplstruct 是Abc接口的实现,但是像这样更改最后一个函数 -


func (abcImpl *AbcImpl) Do(input InputImpl){

    // do something

}

现在AbcImpl不再实现Abc了,虽然InputImpl正在实现Input接口!


我是否遗漏了什么,或者必须具有与接口完全相同的签名(不是事件 Impls)才能成为合法实现?


哆啦的时光机
浏览 117回答 2
2回答

泛舟湖上清波郎朗

是的,您必须遵循您指定的方法签名。如果您不遵循签名,则不会称为“执行”。示例:接口示例从围棋之旅:There is no explicit declaration of intent, no "implements" keyword.

慕侠2389804

在 Go 中实现接口时,必须使用完全相同的签名。否则你无法实现它。
随时随地看视频慕课网APP

相关分类

Go
我要回答