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 關注
- 159 瀏覽
添加回答
舉報