由於谷歌Go使用合成系統,而不是(多)繼承,我只是想知道這3個代碼片段。谷歌去說,他們強迫程序員使用組合。谷歌去,組成和多繼承
A)應該是(幾乎)正確圍棋碼, 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) { ... }
你的問題是什麼? – Ashe
在你的代碼中,你在接口上實現了一個方法。 Go實際上並不允許你這樣做。您可能打算創建一個將排序接口作爲參數的函數。 –