Golang——接口、多态、接口继承与转换、空接口、类型断言
生活随笔
收集整理的這篇文章主要介紹了
Golang——接口、多态、接口继承与转换、空接口、类型断言
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
- 接口是一種規范與標準,只是規定了要做哪些事情。但是具體怎么做,是實現接口的類去做的,接口只是把所有具有共性的方法定義在一起。
- 接口存在的意義就是用來定義規范,用來做功能的拓展
- 接口最大的好處是可以實現多態
- 在Golang中只要接口中的方法和結構體重的一樣,就會認為這么結構體實現了這個接口的方法
- 在這里還是要吐槽一下,Go的語法是真的丑,如果你是Java轉過來的,就會發現,垃圾的一批
接口定義及調用:
定義格式:
tepe 接口名 interface{方法 返回值類型 }調用格式1:
對象名.方法名調用格式2:這種方式必須實現接口中聲明的所有方法
通過接口變量調用演示:
func main() {// 對象名.方法名var stu Studentstu.Hello() // Student類實現了接口的Hello方法var tea Teachertea.Hello() // Teacher類實現了接口的Hello方法// 通過接口變量調用,如果接口中有兩個方法,但是只實現了一個,就會報錯,必須全部實現var testInterface TestInterfacetestInterface = &stutestInterface.Hello() // Student類實現了接口的Hello方法testInterface = &teatestInterface.Hello() // Teacher類實現了接口的Hello方法 }type Student struct{}type Teacher struct{}type TestInterface interface {Hello() }func (student *Student) Hello() {fmt.Println("Student類實現了接口的Hello方法") }func (teacher *Teacher) Hello() {fmt.Println("Teacher類實現了接口的Hello方法") }多態:
- 多態是指同一行為,具有多個不同表現形式
- 多態是一同一個接口,使用不同的實例執行不同的操作
- 多態是除封裝、繼承之后面向對象的第三大特征。
- 多態是出現在接口關系中的(只能是接口)
- 舉例:win電腦和Mac都是電腦(接口),但是mac只能辦公用,win可以辦公可以玩游戲,不同類型的電腦具有不同的特征,就是多態
多態的實現:
func 函數名 (參數 接口類型){}演示:
func main() {var stu Studentvar tea Teacher// 多態Polymorphic(&stu) //Student類實現了接口的Hello方法Polymorphic(&tea) // Teacher類實現了接口的Hello方法 }type Student struct{}type Teacher struct{}type TestInterface interface {Hello() }func (student *Student) Hello() {fmt.Println("Student類實現了接口的Hello方法") }func (teacher *Teacher) Hello() {fmt.Println("Teacher類實現了接口的Hello方法") }func Polymorphic(polymorphic TestInterface) {polymorphic.Hello() }接口的繼承與轉換:
接口的繼承和普通繼承是一樣的,直接寫接口名就可以了
演示:
func main() {var stu Studentvar test02 TestInterface02test02 = &stutest02.Hello()test02.HelloHello() // 可以調用所繼承接口中的方法var test TestInterfacetest = test02test.Hello() }type Student struct{}type Teacher struct{}type TestInterface interface {Hello() }type TestInterface02 interface {TestInterface // 繼承第一個接口HelloHello() }func (student *Student) Hello() {fmt.Println("Hello") }func (student *Student) HelloHello() {fmt.Println("HelloHello") }空接口定義及使用:
空接口(interface {})不包含任何的方法,正因為如此,所有的類型都實現了空接口,因此空接口可以存儲任意類型的數值
演示:
func main() {// 定義空接口的切片,由于是空接口所以可以存儲任意類型的數據var s []interface{}s = append(s, 1, 2, 3, "字符串", 1.1, true)fmt.Println(s) }類型斷言:
通過類型斷言,可以判斷空接口中存儲的數據類型
定義格式:
value,ok:=m.(T)- value:表示變量m的值
- ok:表示布爾類型變量,如果斷言成功為true,否則為false
- m:表示空接口類型的變量
- T:表示斷言的類型
- 如果m
演示:
func main() {var i interface{}i = 123// 如果i是int類型就會把結果賦值給ok,把數據(123)賦值給valuevalue, ok := i.(int)// 如果是123就會打印斷言成功,不是123就會打印斷言失敗if ok {fmt.Println("斷言成功:", value)} else {fmt.Println("斷言失敗")} }總結
以上是生活随笔為你收集整理的Golang——接口、多态、接口继承与转换、空接口、类型断言的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 目标检测如何计算召回率_计算机视觉目标检
- 下一篇: 计算机的桌面教案,《认识计算机桌面》教案