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

weixin_38063224 2019-09-20 10:47:29
最近在学习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语法中标准的继承呢?
...全文
25 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_38074583 2019-09-20
  • 打赏
  • 举报
回复
继承是“类”到“类”,你这是“类”实现了接口,哪门子继承~ 注意,Go 没有继承,可以通过嵌入模拟一部分继承的功能。
weixin_38088352 2019-09-20
  • 打赏
  • 举报
回复
go中没有继承
weixin_38093364 2019-09-20
  • 打赏
  • 举报
回复
继承个毛线,go中的实现接口都看起来很隐晦,少一个方法都不是实现接口,还看不出来,没有关键字。总之go不是面向对象语言~
weixin_38118150 2019-09-20
  • 打赏
  • 举报
回复
go是强类型绑定的语言,所以无法实现真正的继承, 现在好多的所以实现继承的变通方法都是有很大的局限性。 楼主还是不要异想天开了,如果实在需要继承,那就选择java等OO的语言更合适。
weixin_38120187 2019-09-20
  • 打赏
  • 举报
回复
你这是自定义类型实现了接口,没有继承,而且go也没有继承
weixin_38122767 2019-09-20
  • 打赏
  • 举报
回复
这就是一个go语言里的实现接口案例,没有继承

433

社区成员

发帖
与我相关
我的任务
社区描述
其他技术讨论专区
其他 技术论坛(原bbs)
社区管理员
  • 其他技术讨论专区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧