Golang Interface 的再次理解

Interface

Golang 中interface的理解,首先要明确一些常识:

  1. interface 可以表示一种类型(任意一种类型)
  2. interface 是方法的集合(也就是接口的方法集合)
  3. 只要实现了接口中的所有方法,那么就认为你实现了这个接口(称之为 Duck typing)

Duck typing:是多态(polymorphism)的一种形式.在这种形式中,不管对象属于哪个,也不管声明的具体接口是什么,只要对象实现了相应的方法,函数就可以在对象上执行操作.即忽略对象的真正类型,转而关注对象有没有实现所需的方法、签名和语义.

’如果它走起步来像鸭子,并且叫声像鸭子, 那个它一定是一只鸭子.'

interface 就是一组抽象方法的集合,它必须由其他非interface类型实现,而不能自我实现;
interface 可以被任意对象实现,一个类型/对象也可以实现多个 interface
方法不能重载,如 eat(), eat(s string) 不能同时存在
Example:

package main

import "fmt"

type Phone interface {
    call()
}

type NokiaPhone struct {
}

func (nokiaPhone NokiaPhone) call() {
    fmt.Println("I am Nokia, I can call you!")
}

type ApplePhone struct {
}

func (iPhone ApplePhone) call() {
    fmt.Println("I am Apple Phone, I can call you!")
}

func main() {
    var phone Phone
    phone = new(NokiaPhone)
    phone.call()

    phone = new(ApplePhone)
    phone.call()
}

如果接口A实现了接口B中所有方法,那么A可以转化为B接口。
利用struct去实现接口之后,我们就可以用这个struct作为接口参数,使用那些接收接口参数的方法完成我们的功能。这也是面向接口编程的方式,我们的功能依据接口来实现,而不用关心实现接口的是什么,这样大大提供了功能的通用性可扩展性。

func PhoneCall(phone Phone) {
		phone.call()
}

func main() {
		var ph1 Phone
		iphone := &iPhone
		ph1 = iphone
		
		PhoneCall(ph1 )
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值