golang物件導向之多型

2021-10-05 13:39:01 字數 2928 閱讀 8541

變數(例項)具有多種形態。物件導向的第三大特徵,在go語言,多型特徵是通過介面實現的。可以按照統一的介面來呼叫不同的實現。這時介面變數就呈現不同的形態。

在前面的usb介面案例,usb usb,既可以接收手機變數,又可以接收相機變數,就體現了usb介面多型特性。

//編寫乙個working方法,接收乙個usb介面型別變數

//只要實現了usb介面,usb變數會根據傳入的引數來判斷到底是phone還是camera

func

(c computer)

working

(usb usb)

➢多型引數

在前面的usb介面案例,usb usb,即可以接收手機變數,又可以接收相機變數,就體現了usb介面多型。

➢多型陣列

演示乙個案例: 給usb陣列中,存放phone結構體和camera結構體變數

package main

import

("fmt"

)//宣告/定義乙個介面

type usb inte***ce

type phone struct

//讓phone實現usb介面的方法

func

(p phone)

start()

func

(p phone)

stop()

type camera struct

//讓camera實現usb介面方法

func

(c camera)

start()

func

(c camera)

stop()

//計算機

type computer struct

//編寫乙個working方法,接收乙個usb介面型別變數

//只要實現了usb介面,usb變數會根據傳入的引數來判斷到底是phone還是camera

func

(c computer)

working

(usb usb)

func main

usbarr[1]

=phone

usbarr[2]

=camera

fmt.

println

(usbarr)

}

型別斷言,由於介面是一般型別,不知道具體型別,如果要轉成具體型別,就需要使用型別斷言, 具體的如下:

//型別斷言案例

var x inte***ce

var b2 float64

=1.1

x=b2 //空介面,可以接收任意型別

y:=x.

(float64

) fmt.

printf

("y的型別是%t 值是=%v"

,y,x)

➢對上面**的說明:

在進行型別斷言時,如果型別不匹配,就會報panic,因此進行型別斷言時,要確保原來的空介面指向的就是斷言的型別.

➢如何在進行斷言時,帶上檢測機制,如果成功就ok,否則也不要報panic

//型別斷言案例(帶檢測的)

var x inte***ce

var b2 float64

=1.1

x = b2 //空介面,可以接收任意型別

//型別斷言

if y, ok := x.

(float64

); ok

else

fmt.

printf

("繼續執行。。。。"

)

型別斷言實踐1

➢在前面的 usb介面案例做改進:

給phone結構體增加一乙個特有的方法all),當usb介面接收的是phone變數時,還需要呼叫call方法。

//宣告/定義乙個介面

type usb inte***ce

type phone struct

//讓phone實現usb介面的方法

func

(p phone)

start()

func

(p phone)

stop()

func

(p phone)

call()

type camera struct

//讓camera實現usb介面方法

func

(c camera)

start()

func

(c camera)

stop()

//計算機

type computer struct

//編寫乙個working方法,接收乙個usb介面型別變數

//只要實現了usb介面,usb變數會根據傳入的引數來判斷到底是phone還是camera

func

(c computer)

working

(usb usb)

usb.

stop()

}func main

usbarr[1]

= phone

usbarr[2]

= camera

fmt.

println

(usbarr)

//遍歷usbarr

var computer1 computer

for_,v:=

range usbarr

}

型別斷言實踐2

寫乙個函式,迴圈判斷傳入引數的型別

func

typejudge

(items...

inte***ce)}

}func main

物件導向之多型

多型即事物存在的多種形態 要有繼承 要有方法重寫 要有父類引用指向子類物件 1,多型中的成員訪問特點之成員變數 編譯看左邊 父類 執行看左邊 父類 2,多型中的成員訪問特點之成員方法 編譯看左邊 父類 執行看右邊 子類 3,多型中的成員訪問特點之靜態成員方法 編譯看左邊 父類 執行看左邊 父類 總結...

物件導向之多型

多型指的是一類事物有多種形態,多型性是指在不考慮例項型別的情況下使用例項 class animals def run self print running class dog animals def run self print dog is running class pig animals de...

物件導向之多型

多型指的是一類事物有多種形態 動物有多種形態 人,狗,豬 import abc class animal metaclass abc.abcmeta 同一類事物 動物 abc.abstractmethod deftalk self pass class people animal 動物的形態之一 人...