理解物件賦值給介面

2021-09-05 10:37:00 字數 2273 閱讀 7647

所以說只實現介面的部分方法 != 實現該介面------那麼就不可以將物件賦值給該介面

package main

import "fmt"

type animal1 inte***ce

type animal2 inte***ce

type felid inte***ce

type cat struct

func (c *cat) say()

//func (c *cat) color()

func main()

fmt.printf("%t\n", f)

animal = f //物件賦值給介面,實現了該介面的方法

/*相當於f物件賦值給介面,只能呼叫say()方法*/

animal.say()

/*物件賦值給介面,物件必須實現介面的所有方法*/

var dog animal2

dog = f

dog.color()

//f = animal //小的往大的擴充套件報錯,不允許

}

*main.cat

ss1。 可以將乙個物件賦值給乙個介面,只要這個物件實現了這個介面所定義的方法(這裡的方法接收器可以是物件或物件指標),但是通過這個介面只能呼叫介面內的方法,不能直接使用物件的資料成員的。

接收器是指標*t時,介面例項必須是指標(即賦值給介面的是物件的指標)

接收器是值 t時,介面例項可以是指標也可以是值(效果是一致的)

再次體驗

package main

import (

"fmt"

)type integer int

func (a integer) less(b integer) bool

//func (a *integer) add(b integer)

type lesser inte***ce

type lessadder inte***ce

func main()

理解結構體引數為介面的情況下

智慧型判定根據介面的實現,呼叫對應的方法

package main

import "fmt"

type ianimal inte***ce

func (a *animal) run()

func (a *animal) escape(ianimal ianimal)

type dog struct

type animal struct{}

func (d *dog) run()

func main()

dog.s.escape(dog) //觸發 dog run智慧型判定

//觸發 dog run

/*物件賦值給介面*/

ad:=&animal{}

ad.escape(ad)//觸發 animal run

}

這樣就可以理解結構體的元素為介面型別

package main

import "fmt"

type ianimal inte***ce

type includeinte***ce struct

type empty inte***ce

func newinstance(a ianimal)empty .test()

//報錯,必須對結構體賦值後才可以使用對應的方法

a.run() //可以呼叫介面自身的方法

return &includeinte***ce//物件賦值給介面empty,必須實現介面的所有方法

}///必須要有此方法才行

func (t *includeinte***ce)test()

func (a *animal) run()

func (a *animal) escape(ianimal ianimal)

type dog struct

type animal struct{}

func (d *dog) run()

func main()

newinstance(dog).test()

dog.s.escape(dog) //觸發 dog run智慧型判定

//觸發 dog run

/*物件賦值給介面*/

ad := &animal{}

ad.escape(ad) //觸發 animal run

}

給多維陣列物件賦值

var messagetable new function var messageinfo function passparm messageinfo messagetable messageinfo i messageid message messageinfo i message message...

物件賦值給結構體

package main import fmt log net sync time const address localhost 502 方法的巢狀!func main tcptransporter conn closetimer lastactivity 結構體 tcpclienthandler...

java裡面給物件賦值,慎用賦值符號( )

對於物件來說,注意變數名類似於指標,所以請慎用賦值符號 比如下面的 arraylist alall new arraylist for int i 0 i 10 i 此時alall裡面有10個元素 0 9 arraylist alprocessing new arraylist alprocessi...