日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

go面向对象之多态即接口(interface)

發布時間:2023/10/11 综合教程 71 老码农
生活随笔 收集整理的這篇文章主要介紹了 go面向对象之多态即接口(interface) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Go 語言接口

Go 語言提供了另外一種數據類型即接口,它把所有的具有共性的方法定義在一起,任何其他類型只要實現了這些方法就是實現了這個接口。

實例

/* 定義接口 */
type interface_name interface {
method_name1 [return_type]
method_name2 [return_type]
method_name3 [return_type]
...
method_namen [return_type]
} /* 定義結構體 */
type struct_name struct {
/* variables */
} /* 實現接口方法 */
func (struct_name_variable struct_name) method_name1() [return_type] {
/* 方法實現 */
}
...
func (struct_name_variable struct_name) method_namen() [return_type] {
/* 方法實現*/
}

a、定義多個結構體

b、為每個結構體定義一個相同的方法,比如我們下面的事例,Say

c、定義一個接口,這個接口的內容就是步驟b定義的Say()方法

d、在定義一個函數,這個函數,這個函數的參數類型就是步驟c定義的接口

e、調用步驟d的函數,傳遞一個步驟b定義的結構體進去 就實現了多態

1、go語言的多態是用接口來實現的interface

package main

import "fmt"

//面向對象的多態是通過接口interface來實現的,不同的對象,調用相同的接口,實現不同的效果

//go語言中,接口interface是一個自定義類型,描述了一系列方法的集合,關鍵字interface
//接口不能被實例化 //定義接口的方法
//type 接口名字 interface {
//
//} //接口的名字一般以er結尾 //定義一個Personer的接口
type Personer interface {
Say()
} //定義一個學生的結構體 type Studentxxx struct {
name string
score int
} type Teacherxxx struct {
name string
class string
} func (s *Studentxxx) Say () {
fmt.Println(s.name,s.score)
} func (s *Teacherxxx) Say () {
fmt.Println(s.name,s.class)
} type Mystring string func (m Mystring) Say () {
fmt.Println("自定義標準類型")
} //go語言的多態來實現
func Whosay(i Personer) {
i.Say()
} func main() {
sxxxx := &Studentxxx{name:"張三",score:12}
txxxx := &Teacherxxx{name:"李四",class:"一年級"} var my Mystring = "ABC" sxxxx.Say()
txxxx.Say()
my.Say()
//張三 12
//李四 一年級
//自定義標準類型 //go語言實現多態
Whosay(sxxxx)
Whosay(txxxx)
Whosay(my) //張三 12
//李四 一年級
//自定義標準類型 //練習一下make,創建一個數組
x := make([]Personer,3) x[0],x[1],x[2] = sxxxx,txxxx,my
for _,value := range x {
value.Say()
}
//張三 12
//李四 一年級
//自定義標準類型
}

  

2、interface接口實現繼承

//定義一個Personer的接口
type Personer interface {
Say()
} //接口也可以繼承,我們這里寫了一個Personer1的接口,這個接口繼承Personer這個接口,也就是說Personer1
//這個接口也有Say這個方法了,我們同樣也為Personer1這個接口定義了自己的方法,Run()
type Personer1 interface {
Personer
Run()
}

  

定義了結構體

type Personxxxx struct {
name string
class string
age int
}

  

定義一個函數

//go語言的多態來實現
func Whosay(i Personer) {
i.Say()
}

  

為繼承的接口定義方法

func (s2 *Personxxxx) Say()  {
fmt.Println("接口的繼承測試1")
} func (s2 *Personxxxx) Run() {
fmt.Println("接口的繼承測試2")
}

  

	p2 := &Personxxxx{name:"p2222",class:"二年級",age:12}

	p2.Say()
p2.Run()
//接口的繼承測試1
//接口的繼承測試2 Whosay(p2)
//接口的繼承測試1

  

3、if格式的類型判斷

package main

import (
"fmt"
) //接口類型判斷 //定義一個空接口
type Niler interface {
} type PersonTest struct {
name string
age int } func main() {
//定義一個接口類型的切片
list := make([] Niler,3)
list[0] = 1
list[1] = "hello"
list[2] = PersonTest{name:"erBi",age:12} for k,v := range list {
//類型斷言,返回的兩個參數,一個是value,一個是ok,value是變量的值,ok是返回的布爾值
//comma-ok斷言
//這里的例子就是通過上面的返回值v來判斷v的類型,如果v的類型為int。則ok為true
_,ok := v.(int)
if ok {
fmt.Println(k,v,"數字")
} else if _,ok := v.(string);ok{
fmt.Println(k,v,"字符串")
} else if value,ok := v.(PersonTest);ok {
fmt.Println(value.name,"結構體")
} else {
fmt.Println("錯誤的數據類型")
}
}
//0 1 數字
//1 hello 字符串
//erBi 結構體
}

  

4、switch的類型判斷

總結

以上是生活随笔為你收集整理的go面向对象之多态即接口(interface)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。