所以說只實現介面的部分方法 != 實現該介面------那麼就不可以將物件賦值給該介面
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...