七、Go 语言面向对象编程
生活随笔
收集整理的這篇文章主要介紹了
七、Go 语言面向对象编程
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
@Author:Runsen
在 Go 語言中沒有類(Class)的概念,但這并不意味著 Go 語言不支持面向對象編程,畢竟面向對象只是一種編程思想。對于面向對象編程的支持Go 語言設計得非常簡潔而優雅。
下面,我們主要介紹下Go面向對象編程的三大特性:封裝、繼承和多態。
- 封裝:隱藏對象的屬性和實現細節,僅對外提供公共訪問方式
- 繼承:使得子類具有父類的屬性和方法或者重新定義、追加屬性和方法等
- 多態:不同對象中同種行為的不同實現方式
封裝
下面代碼中我們已經定義了一個矩形 Rectangle,定義一個方法 Area() 來計算它的面積,最后就可以調用 Area() 方法,計算面積。
package mainimport ("fmt" )// 矩形結構體 type Rectangle struct {Length intWidth int }// 計算矩形面積 func (r *Rectangle) Area() int {return r.Length * r.Width }func main() {r := Rectangle{4, 2}// 調用 Area() 方法,計算面積fmt.Println(r.Area()) }在 Go 語言中沒有 Java中的public、private、protected 這樣的訪問控制修飾符,它是通過字母大小寫來控制可見性的。這個我在之前說過。
繼承
GO語言的繼承方式采用的是匿名組合的方式:Woman 結構體中包含匿名字段Person,那么Person中的屬性也就屬于Woman對象。
package mainimport "fmt"type Person struct {name string }type Man struct {Personsex string }func main() {man := Man{Person{"Runsen"}, "男"}fmt.Println(man.name) // Runsenfmt.Println(man.sex) // 男 }多態
在面向對象中,多態的特征為:不同對象中同種行為的不同實現方式。在 Go 語言中可以使用接口實現這一特征。接口的概念和Java中的接口一模一樣,只不過定義不同,Go使用type 定義接口,Java使用interface 定義接口。
package mainimport ("fmt" )// 正方形 type Square struct {side float32 }// 長方形 type Rectangle struct {length, width float32 }// 接口 Shaper type Shaper interface {Area() float32 }// 計算正方形的面積 func (sq *Square) Area() float32 {return sq.side * sq.side }// 計算長方形的面積 func (r *Rectangle) Area() float32 {return r.length * r.width }func main() {r := &Rectangle{10, 2}q := &Square{10}// 創建一個 Shaper 類型的數組shapes := []Shaper{r, q}// 迭代數組上的每一個元素并調用 Area() 方法for n, _ := range shapes {fmt.Println("圖形數據: ", shapes[n])fmt.Println("它的面積是: ", shapes[n].Area())} }/* 圖形數據: &{10 2} 它的面積是: 20 圖形數據: &{10} 它的面積是: 100 */由以上代碼輸出結果可知:不同對象調用 Area() 方法產生了不同的結果,展現了多態的特征。
參考資料
- 官方教程: https://gobyexample.com/
- 《Go 入門指南》: https://github.com/unknwon/the-way-to-go_ZH_CN
總結
以上是生活随笔為你收集整理的七、Go 语言面向对象编程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 六、Go编程语言中的函数式编程
- 下一篇: 五、Go语言复合数据类型(下)