這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
前言:
上篇中,我們講到了在Go語言中如何定義方法,今天,我們將進一步深入Go語言的物件導向編程。
一、Go語言中的介面
首先來看一個最基本的介面:
和定義一個結構體類似,只不過將struct換成了interface,然後聲明了兩個函數:draw()和count()。就這麼簡單,一個介面就定義好了,那麼如何?介面呢?在java中我們會讓一個類去實現介面,在實現的時候必須用implements關鍵字顯示聲明去實現,如:
class myshow implements show{...}
在Go語言中,不需要這麼做,我們要做的只是去實現介面聲明的所有函數就可以了,如下所示,就實現show這個介面:
上面代碼,我們的osArgs結構體實現了文章開頭給出的show這個介面。其實就是用到上一篇的內容,給osArgs結構體定義了兩個方法,而這兩個方法就是介面定義的兩個函數,只是我們具體完成了這兩個函數具體要做的功能。這不就是介面的功能麼,你可以定義很多個結構體,分別實現show介面,使得它實現不同的功能。但是Go語言的介面實現不需要顯示去聲明實現了某個介面如上面的show,因為很有可能在另外一個地方,有一個show2的介面,它也是定義了draw()和count()函數。所以,你其實也是實現了show2這個介面,這似乎非常靈活,自由。這裡不會講它如何如何好,或者如何如何不好,哈哈哈,因為......反正對於初學者來說,目前只需要懂得如何用就好了,等深入後再去探討“好壞”的問題會更好。最後,看如何具體使用上面的介面:
要想這個例子正常編譯運行,記得匯入os包哦。
二、Go語言中的介面的繼承
如Go語言沒有繼承,而使用組合的方式來實作類別似功能,其實介面也是,不像java或其它語言一個繼承介面,而是組合一個介面,我們簡單的改寫前面的代碼:
我們將之前的介面show改成首字母大寫,還記得吧,這樣就可以被外部包調用,而且把之前show介面的draw函數分離出一個Drawer介面,在Draw後加上er是因為在Go語言中習慣上,單一成員的介面的名稱是其成員名加-er。然後在Show介面中組合Drawer介面,如上代碼所示。
三、本篇小結
本篇介面就寫到這裡,在下一篇中將看到更多關於Go介面的相關內容。
-
作者:Sirk
-
出處:http://www.cnblogs.com/vimsk
-
本文著作權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文串連,否則保留追究法律責任的權利。
|