前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >golang反射——执行函数

golang反射——执行函数

作者头像
Java架构师必看
发布2021-05-14 17:08:28
8460
发布2021-05-14 17:08:28
举报
文章被收录于专栏:Java架构师必看Java架构师必看

从面向对象的角度上看,总会有一些使用子类不想做,希望父类去做的事情,在java这样的纯面向对象的语言中,方法就是使用父类和子类,子类通过继承父类的方法,实现子类自己的属性,如果没有某个方法没有经过子类重写,那么这个方法通过子类调用时,就会调用父类的方法。

在go中也有这样的机制。下面是具体的实现代码。

简单的说就子类能够按照父类的方法框架来设计,同时父类还把一些子类自身的个性化的方法进行了抽象,抽象成golang中的接口,通过实现接口实现了在指定的方法上调用子类或者父类(取决于子类是否重新实现了方法),

好,下面上货。

代码语言:javascript
复制
package demo

import (
	"fmt"
	"testing"
)

type IChildHandle interface {
	AddAge()
	HandleAfterInit(handler IChildHandle)
}

type Base struct {
	name string
	age  int
}

func (b *Base) AddAge() {
	fmt.Println("base add Age .....")
}

func (b *Base) reName() {
	fmt.Println("rename ing...")
}

func (b *Base) HandleAfterInit(handler IChildHandle) {
	fmt.Printf("before save base obj name:%s,age:%d\r\n", b.name, b.age)
	b.name = b.name + "aaaaa"
	handler.AddAge()
	fmt.Printf("real save base obj name:%s,age:%d\r\n", b.name, b.age)
}

type Child1 struct {
	*Base
	price int
}

func (c *Child1) AddAge() {
	fmt.Println("child add age ...")
	c.age += 2
}

func TestDuoTai(t *testing.T) {
	b := &Base{
		name: "base xx",
		age:  100,
	}
	c := &Child1{
		Base:  b,
		price: 333,
	}
	b.HandleAfterInit(c)
	c.AddAge()
	c.reName()
	fmt.Println(c.age)
}

运行结果如下:

代码语言:javascript
复制
=== RUN   TestDuoTai
before save base obj name:base xx,age:100
child add age ...
real save base obj name:base xxaaaaa,age:102
child add age ...
rename ing...
104
--- PASS: TestDuoTai (0.00s)
PASS

上面的代码说明了在go中如果使用父子继承关系的类,同时也说明了在子类中自定义个性化的方法的同时,如何与父类进行关联。总结的说就是golang 的面向对象是如何具体编码实现的。

本文来源0day__,由javajgs_com转载发布,观点不代表Java架构师必看的立场,转载请标明来源出处

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档