让人迷惑的 interface

2020-04-29 22:11:03 +08:00
 SlipStupig

golang 里面有用interface定义接口的,而这个接口似乎并不是其它语言所定义的接口比如:Java python 一个个含义,我在网上看了一个示例代码:

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 IPhone struct {
}

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

func main() {
	var phone Phone

	phone = new(NokiaPhone)
	phone.call()

	phone = new(IPhone)
	phone.call()

}

为什么能用struct完成组合继承,还需要用interface呢?

2215 次点击
所在节点    Go 编程语言
5 条回复
AngryPanda
2020-04-29 22:13:57 +08:00
这个例子,不是为了演示继承。
Hanggi
2020-04-29 22:16:52 +08:00
Duck typing 了解下
djoiwhud
2020-04-29 22:18:21 +08:00
golang 的 interface 与 java 的作用非常类似。本质上是为了实现多态特性而存在的。还和 cpp 的虚函数是一样的目标。此例子并没有显示出 go 的接口的用途。
lhx2008
2020-04-29 22:19:28 +08:00
这个是接口来做多态,但是一般用在函数参数或者成员变量里面, 不会有人真的在 main 里面 var 一个接口。
Go 的嵌套也算不上是完整的继承,只是把组合的成员变量和函数换了个变量空间释放了
janxin
2020-04-30 08:12:59 +08:00
python 有 duck typing 的吧

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/667423

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX