4 回答
TA贡献1827条经验 获得超4个赞
是的,z实现了x和y。您可以通过使用变量声明将具体类型分配给接口类型来证明:
var _ x = z{}
var _ y = z{}
这为您提供了编译时检查,以确保类型实现了您想要的接口。
作为旁注,如果您明确想y成为x + some more methods,那么这样写是有意义的:
interface y {
x
b()
}
关于命名,如果一个类型实现了两个共享某些方法的不同接口,我会这样称呼它——一个实现两个不同接口的类型。一个接口是另一个接口的子集并不重要。
此外,在 Go 中,类型(以及非结构类型)在定义时不与接口相关联。即使一个类型不是为了实现某个接口而编写的,您也可以通过定义具有不同名称和/或该类型的不同方法组合的新接口来使其实现任意数量的接口。这使得为概念命名变得更加困难——当接口稍后可能在另一个包中定义时,您如何在类型定义时知道名称?
TA贡献1802条经验 获得超4个赞
一开始我很难掌握 Go 接口的窍门。我有多年的 Java、C++、Python 经验……恕我直言,充分利用 Go 和任何其他新语言的最佳方法是不要用 Go 语法编写 Java 或 C++。了解 Go 中的事物是如何工作的并使用它。术语可能不是精确的一对一映射,但这无关紧要。
将 Go 接口视为一组对某些数据组(结构)进行操作的方法签名。 类似于Java 接口只是类上的一组方法签名。主要区别在于,在 Go 中,你不需要指定结构implements
接口,语言会为你做。如果您在结构上指定方法,它会自动实现接口。
TA贡献1853条经验 获得超6个赞
您说 z 实现了这两个接口是正确的。
接口本身是一个通用的编程概念,并不局限于面向对象的语言。一些面向对象的语言(如 Java 和 Go)提供了一种定义和实现接口的方法,而其他语言则没有。
它实际上是一种多态性,因为您说的是一组特定的函数或方法可能由不同的数据结构类型实现。正如维基百科文章所建议的那样。它也可以被认为是类型抽象。
Go 能够支持面向对象和面向过程的编程风格。它被认为是一种面向对象的编程语言。
Go 是一种强类型语言,接口允许 Go 程序员通过他们的方法定义类型,以及通过数据结构定义类型的其他方式。
TA贡献1806条经验 获得超8个赞
Go 中没有继承的概念。它促进了组合而不是继承。
来自 Go 常见问题解答:
没有类型层次结构:类型就是这样,它们不必声明它们的关系。这些简化使 Go 既具有表现力又易于理解,而不会牺牲复杂性。
- 4 回答
- 0 关注
- 119 浏览
添加回答
举报