大家好,今天將梳理出的 Go語言物件導向內容,分享給大家。 請多多指教,謝謝。
封裝、繼承、多型是物件導向的3個基本特徵,本文主要介紹Go語言是如何實現這些特徵的。
Golang實現物件導向的兩個關鍵型別是 struct
和 interface
,前面Golang 基礎之基礎語法梳理 (二)、Golang 基礎之基礎語法梳理 (三) 文章已將詳細介紹了用法和案例。
本章節內容
- 封裝
- 繼承
- 多型
幾點說明
- Go支援物件導向(OOP),並不是純粹的面嚮物件語言;
- Go沒有類的概念,結構體(struct)相當於其它程式語言的類(class);
- Go物件導向程式設計非常簡潔,通過介面(interface)關聯,耦合性低,也非常靈活;
本節內容,我將這三層概念簡化成通俗易懂的文字,帶大家認識。 相信幾分鐘後,大家會對物件導向有一個深刻的印象,為以後的開發,有所幫助。
封裝
封裝就是把抽象出來的欄位和操作方法封裝在一起,資料被保護在內部,只有通過操作方法,才能對欄位進行操作。
package main
import "fmt"
type Person struct { // 抽象出來的欄位
name string
}
func (person *Person) setName(name string) { // 封裝方法
person.name = name
}
func (person *Person) GetInfo() { // 封裝方法
fmt.Println(person.name)
}
func main() {
p := Person{"帽兒山的槍手"}
p.setName("新名字")
p.GetInfo() // 輸出 新名字
}
繼承
繼承顧名思義,可以解決程式碼複用。在Go中,只需要在結構體中巢狀一個匿名結構體。
Go沒有顯式的繼承,而是通過組合實現繼承。
package main
import "fmt"
type Person struct { // 抽象出的欄位
name string
}
func (p *Person) getName() { // 封裝方法
fmt.Println(p.name)
}
type Inherit struct { // 繼承
Person
}
func main() {
i := Inherit{Person{"帽兒山的槍手"}}
i.getName() // 輸出 帽兒山的槍手
}
多型
把它們共同的方法提煉出來定義一個抽象的介面,就是多型。
package main
import "fmt"
type Birds interface { // 將共同的方法提煉出來
fly()
}
type Dove struct {
}
type Eagle struct {
}
func (d *Dove) fly() { // 封裝方法
fmt.Println("鴿子在飛")
}
func (e *Eagle) fly() { // 封裝方法
fmt.Println("鷹在飛")
}
func main() {
var b Birds // 多型的抽象介面
dove := Dove{}
eagle := Eagle{}
b = &dove
b.fly() // 鴿子在飛
b = &eagle
b.fly() // 鷹在飛
}
技術文章持續更新,請大家多多關注呀~~
搜尋微信公眾號【 帽兒山的槍手 】,關注我