先送上傳送門:
翻譯:傳統的物件導向程式設計中提供了三個特性。當 dog 從 animal 繼承
1,該dog將重用animal的**。
2,x 型別的變數animal可以指a dog或a animal,即基類可以指向子類。
3,x.eat()將eat根據什麼型別的物件x引用來選擇一種方法,即多型性。
在物件導向的行話來說,這些特徵被稱為**重用,多型性和動態排程。
所有這些都可以在go中使用,使用方式如下:
1,組合和嵌入來實現**重用。
2,inte***ce 來實現多型性和動態分配。
type
animal struct
type
dog struct
type animal struct
func (a *animal) eat()
func (a *animal) sleep()
func (a *animal) breed()
type dog struct
func (a *dog) eat()
func (a *dog) sleep()
func (a *dog) breed()
這樣通過組合和嵌入,實現了dog對animal成員變數和成員方法的繼承,雖然寫起來有些繁瑣。
type sleeper inte***ce
func main()
for _, x := range pets
}
翻譯完畢。
我覺得前半段,即組合和嵌入可以給我們未來如果要用物件導向的思想去寫go的話,提供了個不錯的想法。後半段inte***ce大家肯定再熟悉不過了。
golang 物件導向程式設計
對於物件導向程式設計的支援go 語言設計得非常簡潔而優雅。因為,go語言並沒有沿襲傳統物件導向程式設計中的諸多概念,比如繼承 不支援繼承,儘管匿名欄位的記憶體布局和行為類似繼承,但它並不是繼承 虛函式 建構函式和析構函式 隱藏的this指標等。儘管go語言中沒有封裝 繼承 多型這些概念,但同樣通過別...
golang 物件導向
method的語法如下 func r receivertype funcname parameters results 下面我們用最開始的例子用method來實現 package main import fmt math type rectangle struct type circle struc...
golang 物件導向
package main golang 物件導向 import fmt type相當於 c c 的 typedef拉 type myint int64 type person struct 繼承 匿名欄位person,相當於c c 的繼承拉,student就擁有了person所有的屬性拉,其實c c...