Go语言程序设计(十三)方法

Go语言没有类,但支持方法,方法是一个带接收者的函数。方法可以通过不同接收者类型同名,值接收者和指针接收者有区别,指针接收者可直接修改对象内容。匿名Receiver可以省略变量名,但不同类型的匿名Receiver方法不能同名。方法可以通过匿名字段实现继承,外部方法可以重写匿名字段的同名方法。

        Go语言虽然没有类(Class),但同样支持方法(Method),Go语言里的Method其实就是一个带接收者(Receiver)的函数。

一、Method的基本定义

        Go语言中的Method类似于一个函数,只是函数名前多了一个绑定类型参数——receiver。

基本格式如下:

func (recv receiver_type) methodName(参数列表)(返回值){
        ...........
}

Method中的Receiver可以是内置类型、自定义类型、结构体或指针类型。

1、多个Method可以同名

(1)在定义Method时,多个Method可以同名,如果接收者不一样,那么Method就不一样。

(2)如果普通类型作为Receiver,它只是一个值传递;而指针类型作为Receiver,它将是一个引用传递。两者的差别在于,指针作为Receiver 会对实例对象的内容发生操作,而普通类型作为Receiver仅是以副本作为操作对象,并不对原实例对象发生操作

(3)Method里面可以访问接收者的字段,调用Method进行访问,就像在Struct里访问字段一样。

2、匿名Receiver

(1)如果方法代码中从不使用Receiver参数,那么就可以省略Receiver的变量名,此时的接收者将是一个匿名Receiver。

(2)如果定义了两个匿名Receiver,一个是普通类型,另外一个是指针类型。注意,这种情况下方法名不能同名,要不然编译会出错。

二、Method的继承

        如果匿名字段实现了一个Method,那么包含这个匿名字段的Struct对象也能调用该Method。

 三、Method重写

        在上例中,如果student想要实现自己的sayHi()方法,可以采用Method重写的方法来解决。这和匿名字段重名是一样的道理,即外部方法会隐藏匿名字段同名方法。所以可以在student上再定义一个Method,重写了匿名字段的方法。

 编译并运行该程序,输出结果为:

Hi,I'm郑智you can call me on 010一22002.
Hi,I'm李明,I study in Yale University,call me on 010- 11001.

        通过上例的运行结果可以看出,对象studentl在调用sayHi()方法时,Receiver为people的方法将被隐藏,实际调用的是Receiver为student的这个外部sayHi()方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值