【发布时间】:2012-06-24 06:52:13
【问题描述】:
由于 Go 使用组合系统而不是(多重)继承,我只是想知道这 3 个代码 sn-ps。 Go 说他们强迫程序员使用组合。
A) 应该是(几乎)正确的 Go-Code, B) 伪 C) 伪
恕我直言,这三个代码的结果总是相同的,除了 B) 和 C) 可以用于更多的东西和 A) 迫使你坚持组合?
即使您假设 B) 在类中没有排序方法,但是 - 可以说像 A) 这样的全局并没有真正的区别 oO
A) Go 代码:
interface Sort
Len()
Less(i, j int) bool
Swap(i, j int)
func (qs *Sort) sort()
doTheSorting
type MyData struct {
var value int
}
func (s *MyData) Len() { ... }
func (s *MyData) Less(i, j int) bool { ... }
func (s *MyData) Swap(i, j int) { ... }
B) 看起来像继承,但恕我直言,根据编译器的工作方式,可以将其视为嵌入式。
class Sort
public sort() { ... }
abstract Len()
abstract Less(i, j int) bool
abstract Swap(i, j int)
C)
interface SortInterface
void Len()
bool Less(i, j int)
void Swap(i, j int)
class Sort implements SortInterface
public sort() { ... }
用法 B 和 C:
class MyClass **embed** Sort
int value
void Len() { ... }
bool Less(i, j int) { ... }
void Swap(i, j int) { ... }
【问题讨论】:
-
在你的 go 代码中,你在接口上实现了一个方法。 Go 实际上并不允许你这样做。您可能打算创建一个将排序接口作为参数的函数。
标签: inheritance interface go composition