• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

go的匿名组合

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

golang也提供了继承机制,但采用组合的文法,因此称为匿名组合。与其他语言不同, golang很清晰地展示出类的内存布局是怎样的。

一  非指针方式的组合

 1)基本语法

 

type base struct{
	//成员变量
}

func(b *base) 函数名(参数列表)(返回值列表){
	//函数体
}

//派生类
type derived struct{
	base
	//成员变量
}

func (b *derived) 函数名(参数列表)(返回值列表){
	//函数体
}

 

2)继承规则

 在派生类没有改写基类的成员方法时,相应的成员方法被继承。

        派生类可以直接调用基类的成员方法,譬如基类有个成员方法为Base.Func(),那么Derived.Func()等同于Derived.Base.Func()

        倘若派生类的成员方法名与基类的成员方法名相同,那么基类方法将被覆盖或叫隐藏,譬如基类和派生类都有成员方法Func(),那么Derived.Func()将只能调用派生类的Func()方法,如果要调用基类版本,可以通过Derived.Base.Func()来调用。

举例如下:

 

package main

import "fmt"

type Base struct{
	//成员变量
}

func(b *Base) Func1(){

	fmt.Println("Base.Func1 was invoked1")

}

func(b *Base) Func2(){

	fmt.Println("Base.Func2 was invoked1")

}

//派生类
type Derived struct{
	Base
	//成员变量
}

func (d *Derived) Func2(){
	fmt.Println("Derived.Func2() was invoked!")
}


func (d *Derived) Func3(){
	fmt.Println("Derived.Func3() was invoked!")
}

func main(){
	d:=&Derived{}
	d.Func1()
	d.Base.Func1()
	d.Func2()
	d.Base.Func2()
	d.Func3()
}

 

 

二  指针组合模式

基本语法:

/ 基类
type Base struct {
    // 成员变量
}

func (b *Base) 函数名(参数列表) (返回值列表) {
    // 函数体
}

// 派生类
type Derived struct {
    *Base
    // 成员变量
}

func (b *Derived) 函数名(参数列表) (返回值列表) {
    // 函数体
}

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Go在windows下执行命令行指令发布时间:2022-07-10
下一篇:
HTML页面实现返回顶部效果 go to top发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap