go/golang接口(interface)继承关系,代码通俗易懂

1 篇文章 0 订阅
package main

import "fmt"

func main() {
	n := newBs()
	n.Test()
}

type ai interface {
	AI()
}
type as struct {
}

// func (a *as) AI() {
// 	fmt.Println("ai")
// }

type bi interface {
	BI()
}
type bs struct {
}

func (b *bs) BI() {
	fmt.Println("bi")
}

// ns 结构体中有 ai bi接口
// 1、ns 结构体中ai bi 未初始化 选择实现实现接口中的方法 (fun(n *ns)ai bi func)
// 2、ns 结构体中ai bi 初始化 进行实现相对应的接口方法
type ns struct {
	ai
	bi
	Id int64
}
type ni interface {
	ai     // 可以不实现
	bi     // 可以不实现
	Test() // 必须实现
}

func newBs() ni {
	n := &ns{}
	// n.ai = &as{}
	n.bi = &bs{}
	return n
}
// 有人会疑问 这里n.BI(),在 func(n *ns)BI()没有这个方法
// 是因为ns这里查不到,他会去 n.ai.BI() a.bi.BI() 这里查找相对应的方法实现
func (n *ns) Test() {
	// n.AI()
	n.BI()
}

func (n *ns) AI() {
	fmt.Println("ns ai")
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值