Go 物件 介面 繼承

2021-10-07 19:42:07 字數 2116 閱讀 7120

物件

go語言中物件導向的風格和c語言中類似,由類和方法(相當於類的函式)構成。

定義乙個點類

type point struct

在c++中,類中的成員和函式分為私有private和公有public。在go中也類似的這樣區分,不同的是

public 成員和方法的首字母大寫

private 成員和方法的首字母小寫

建立乙個物件

/*通過new建立新的物件*/

var p *point =

new(point)

//p 是物件的指標

p.x =

3 p.y =

4/*建立物件並初始化*/

var p1 point = point

var p2 *point =

&point

其中,通過內建函式new來建立物件,返回乙個指標,指向一塊記憶體單元,所以建立物件是型別就變成了*point

給物件新增方法,形如 func (物件 類名) 方法名()返回值型別

應用

type point struct

func

(p point)

distance()

float64

func

main()

fmt.

println

(p1.

distance()

)}

type point struct

func

(self point)

scale

(factor float64

)func

main()

p1.scale(2

) fmt.

println

(p1)

}

想要通過方法進行引數擴大,但結果並沒有改變,因為只向方法中傳遞了乙個值,並不能影響其本身的大小。

若想進行引數放大,需要向方法中傳遞乙個位址

type point struct

func

(self *point)

scale

(factor float64

)func

main()

p1.scale(2

) fmt.

println

(p1)

}

介面

若幾個物件間存在公共行為,則可將行為抽象出來定義為介面。介面實際上就是方法的集合

type printer inte***ce

type user struct

type goods struct

func

(u user)

print()

func

(g goods)

print()

func

main()

g := goods

u.

print

()

g.print

()

或者

var ip printer//定義了介面變數p

ip = u //介面的公端和母端結合,ip相當於乙個主機板,u相當於插入主機板的使用者,乙個電腦主機和u盤的結合

//將物件u賦給介面變數p

ip.print()

//呼叫介面中的公共方法

ip = g//將介面變數p的值改為g

ip.print()

}

繼承

go語言通過匿名組合來實現類似繼承的功能

type user struct

type leader struct

func

(u user)

output()

func

main()

Go 介面,介面繼承

demo.go 介面繼承 package main import fmt 父介面 type humen inte ce 子介面 type person inte ce 學生類 type student struct 學生類的方法 讓學生類符合父介面的規則 func stu student sayhe...

GO 物件導向5 介面的繼承

定義兩個父類介面 定義動物介面 所有動物都會新陳代謝,都會掛掉 type animal inte ce 定義戰士介面,會進攻和防守 type fighter inte ce顯式地繼承父類介面 野獸介面,擁有動物的一切特徵 野獸介面,擁有戰士的一切特徵 type beast inte ce隱式繼承父類...

物件導向 繼承 介面

一 繼承 子類繼承父類,通過在類後面加冒號來繼承某個類 一旦形成繼承關係後,子類的物件就能夠使用父類中的公共屬性和方法函式 子類能夠轉換成父類,但父類不一定能夠轉成子類 只有當父類物件是由某個子類物件轉換來的時候,才能再把父類物件轉換回去,從哪個子類來的,就只能再轉回那個子類去 直接通過父類的建構函...