比如现在有产品接口(Product)和具体的产品A(ProductA):
// Product 产品接口
type Product interface {
GetInfo() string
}
// ProductA 具体产品A, 实现了Product接口
type ProductA struct {
name string
}
func (p *ProductA) GetInfo() string {
return p.name
}
生产者接口(Creator)和具体生产者A(CreatorA):
// Creator 生产者接口
type Creator interface {
Produce() Product // 接口方法声明返回值是一个产品接口类型
}
// CreatorA 具体生产者A
type CreatorA struct {}
func (c *CreatorA) Produce() *ProductA { // 这样写CreatorA就没实现接口Creator
return &ProductA{"xxx"}
}
*ProductA
是一个实现了接口Product
的类型, 但是func(c *CreatorA) Product() *ProductA
却不符合接口Creator
?
只有写成func(c *CreatorA) Product() Product
才符合了接口Creator
, 那是不是就是说具体方法的声明要跟接口声明写的一毛一样才有效?
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…