2 回答
TA贡献1871条经验 获得超13个赞
将接口更多地视为合同。它们不会仅仅因为它们不直接实现任何东西而隐式实现其他接口。
接口由实现满足。(希望这是有道理的)
在您的示例中,两种机器类型都可以创建简单的“材料”,如下所示: https: //play.golang.org/p/ZoYJog2Xri
package main
type Machine1 interface {
Produce() Material
}
type Machine2 interface {
Produce() Material
}
type Material interface {
Use() error
}
type PencilMachine struct{}
func (pm *PencilMachine) Produce() Material {
return &Pencil{}
}
type Pencil struct{}
func (p *Pencil) Use() error {
return nil
}
func main() {
pm := new(PencilMachine)
var m1 Machine1
m1 = Machine1(pm)
var m2 Machine2
m2 = Machine2(m1)
_ = m2
}
TA贡献1802条经验 获得超5个赞
这是因为您的铅笔机没有实现 Machine2 接口。这是罪魁祸首:
func (pm *PencilMachine) Produce() Material1 {
return &Pencil{}
}
您会看到,尽管 PencilMachine 具有相同的功能Produce,但它不会返回相同的数据类型(Material1),因此它仅实现 Machine1。Machine2 需要一个Produce函数来返回 Material2
- 2 回答
- 0 关注
- 177 浏览
添加回答
举报