接口与实现
Eg. 1
package main
import "fmt"
// 定义接口
type Chname interface {
GetName() string
SetName(name string)
}
// 定义实现类
type iPeople struct {
name string
}
// 实现接口方法
func (p *iPeople) GetName() string {
return p.name
}
func (p *iPeople) SetName(name string) {
p.name = name
}
func main() {
// 新建一个iPeople实例并初始化
people := &iPeople{
name: "SuShen",
}
fmt.Println(people.GetName()) // SuShen
people.SetName("JunShen")
fmt.Println(people.GetName()) // JunShen
}
Question
对接口实现例子,接口定义部分完全可以去掉而不影响程序运行。
那么接口定义存在的意义是什么?
接口与实现的方法通过什么联系起来的?看起来也就实现的结构体与方法有关联!
Eg. 2
package main
import "fmt"
// 定义接口
type Chname interface {
GetName() string
SetName(name string)
}
// 定义实现类
type iPeople struct {
name string
}
type iCat struct {
name string
}
// 实现接口方法
func (p *iPeople) GetName() string {
return p.name
}
func (p *iPeople) SetName(name string) {
p.name = name
}
func (p *iCat) GetName() string {
return p.name
}
func (p *iCat) SetName(name string) {
p.name = name + "Cat"
}
func main() {
// 新建一个iPeople实例并初始化
people := &iPeople{
name: "SuShen",
}
cat := &iCat{
name: "BlackCat",
}
var p Chname = people
fmt.Println(p.GetName()) // SuShen
p.SetName("JunShen")
fmt.Println(p.GetName()) // JunShen
p = cat
fmt.Println(p.GetName()) // BlackCat
p.SetName("White")
fmt.Println(p.GetName()) // WhiteCat
}