1. 首页
  2. 主题
  3. Go问与答

关于Go接口继承问题的问题

boz14676 · · 1972 次点击
最近在学习Go语言,其中遇到了一个关于go接口继承问题,希望可以得到大家的解答。 正常继承interface的代码段如下: ```go package main import ( "fmt" ) //定义interface type VowelsFinder interface { FindVowels() []rune } type MyString string //实现接口 func (ms MyString) FindVowels() []rune { return 'ok' } func main() { name := MyString("Sam Anderson") // 类型转换 var v VowelsFinder // 定义一个接口类型的变量 v = name fmt.Printf("Vowels are %c", v.FindVowels()) } ``` 其中 `main` 方法中的 `name` 变量为 `MyString` 类型( `MyString` 的结构体函数实现了 `VowelsFinder` 接口),然后将 `name` 转换为 `VowelsFinder` 类型,说明继承完成。 但是我的疑问点是:即使不进行 `v=name`的 类型转码,变量 `name` 本来就是`VowelsFinder` 类型,已经继承完成。如下改动代码: ```go func findType(i interface{}) { switch v := i.(type) { case VowelsFinder: fmt.Println("VowelsFinder type.", v); default: fmt.Printf("unknown type\n") } } func main() { name := MyString("Sam Anderson") findType(name) // VowelsFinder type. } ``` 通过 `findType` 函数得到变量 `name` 已经是接口 `VowelsFinder` 的类型了,那么是上面main函数的代码是否实现了Go语法中标准的继承呢?
go是强类型绑定的语言,所以无法实现真正的继承, 现在好多的所以实现继承的变通方法都是有很大的局限性。 楼主还是不要异想天开了,如果实在需要继承,那就选择java等OO的语言更合适。
#4
更多评论
polaris
社区,需要你我一同完善!
继承是"类"到"类",你这是"类"实现了接口,哪门子继承~ 注意,Go 没有继承,可以通过嵌入模拟一部分继承的功能。
#1

用户登录

没有账号?注册

今日阅读排行

    加载中

一周阅读排行

    加载中