golang记录与问题

原创
2021/08/05 10:14
阅读数 43

接口与实现

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
}
展开阅读全文
go
加载中
点击引领话题📣 发布并加入讨论🔥
0 评论
0 收藏
0
分享
返回顶部
顶部