golang的繼承與j**a和php不太一樣,如php繼承需要用到extends關鍵字,而golang使用的是匿名繼承或有名繼承。
二:簡單舉例
package mainimport (
"fmt"
)type brand struct
type goods struct
func main()
結果[ `go run extends.go` | done ]
純牛奶}
繼承的好處有,提高**的復用性,程式的擴充套件和維護更加簡單
三:繼承的使用細節
①:結構體可以使用繼承結構體的所有字段,無論首字母大寫還是小寫。
package mainimport (
"fmt"
)type person struct
func (p person) say()
type anna struct
func main()
結果[ `go run extends.go` | done ]
我的名字叫anna,今年18歲
②:匿名繼承方法訪問方式可以簡化
修改①中的例子,將訪問方式簡化
func main()
③:當結構體和匿名結構體有相同欄位時,結構體變數採用就近原則來方法字段,如果希望採用匿名的字段,使用詳細訪問方式即可
package mainimport (
"fmt"
)type person struct
func (p person) say()
type anna struct
func (a anna) annasay()
func main()
結果[ `go run extends.go` | done ]
我的名字叫anna,今年0歲
我今年18歲
備註:anna訪問的流程如下 先查詢anna結構體是否有需要的字段,有就是要anna結構體,否則往anna的匿名結構體person上查詢,找到就使用該結構體的字段,否則繼續往person的匿名結構體查詢,直到按照就近原則找到為止,沒找到就報錯。
④:當有兩個匿名結構體,且兩個匿名結構體有相同的欄位名稱而結構體如anna沒有該形同欄位時,必須指定匿名結構體名稱,否則報錯。
package mainimport (
// "fmt"
)type person struct
type animal struct
type anna struct
func main()
⑤:結構體繼承有名結構體時,這種方式就是組合,訪問組合的字段時,必須帶上結構體名稱
type anna structfunc main()
在第④基礎上修改。
⑥:在建立結構體變數時可以同時指定匿名結構體的字段值
package mainimport (
"fmt"
)type person struct
type anna struct
func main() }
fmt.println(anna)
var louis anna = anna,}
fmt.println(louis)}結果
[ `go run extends.go` | done ]
} }
⑦:多重繼承,在第④中有舉例,略。
Go 物件導向程式設計之繼承
package main import fmt 編寫乙個學生考試系統 小學生 type pupil struct 顯示他的成績 func p pupil showinfo func p pupil setscore score int func p pupil testing 大學生,研究生。大學生...
Python 之物件導向 繼承
目標 單繼承多繼承 物件導向三大特性 封裝 根據 職責 將 屬性 和 方法 封裝 到乙個抽象的 類 中 繼承 實現 的重用,相同的 不需要重複的編寫 多型 不同的物件呼叫相同的方法,產生不同的執行結果,增加 的靈活度 單繼承1.1 繼承的概念 語法和特點 繼承的概念 子類 擁有 父類 的所有 方法 ...
開腦洞學程式設計之物件導向
本專欄序章與目錄 物件導向的程式設計是軟體工程中乙個非常重要的組成部分,其三大特性 繼承 封裝 多型對初學者來說可能有一些難以理解。這裡舉乙個比較簡單的現實生活中的例子 學習 來進行說明。這裡提到的學習是乙個抽象的概念,不管是學習某一門課程,還是學習做飯,還是學習把妹,具體細節可能不同,但巨集觀上的...