go語言之物件導向一

來源:互聯網
上載者:User

標籤:height   指標類型   UNC   ret   The   需要   efi   prot   second   

在Go語言中, 你可以給任意類型(包括內建類型,但不包括指標類型)添加相應的辦法。樣本如下:

type Integer int

 

func (a Integer) Less(b Integer) bool{

        return a < b

 

func main(){

        var a Integer=1

        if a.Less(2){

                 fmt.Println(a,"less than 2")

        }

}

在代碼中,我們為內建的int類型增加了一個新方法Less()。這樣實現了後,就可以讓整型像一個普通的類一樣使用。對應的面向過程的方法如下:

func Integer_Less(a Integer, b Integer) bool {

    return a<b

}

那麼當我們需要修改對象的值的時候,就需要用到指標引用。調用如下:

func (a *Integer) Add(b Integer){

        *a+=b

}

如果不傳入指標,那麼得到的值和傳入的時候是一樣的,這一點Go和C語言一樣,類型都是基於值傳遞的。要想修改變數的值,只能傳遞指標。

 

既然類型都可以有自己的辦法,那麼對於結構體來說也一樣可以擁有自己的方法。樣本如下:

type Rect struct{

        x,y float32

        width,height float64

}

func (r Rect) Area() float64{

        return r.width*r.height

}

 

func main(){

        var r Rect

        r.height=3

        r.width=4

        fmt.Println("the area is:",r.Area())

}

 

既然是物件導向,那麼是否可以繼承呢。答案是肯定的,Go裡面也可以使用繼承。但是和C++以及Java的方法不一樣,採用了繼承的方法。一般稱為匿名組合。

type string1 struct{

        first string

}

 

type string2 struct{

        string1

        second string

}

這個string1在string2的位置是靈活可變的,可以放在second的後面也可以放在前面。Go語言很清晰的告訴你類的記憶體布局是怎樣的。此外,在Go語言中還可以隨心所欲的修改記憶體布局。下面的代碼定義了一個Base類並且實現了Foo和Bar兩個方法。然後定義了一個Foo類,該類從Base類繼承並改寫了Bar方法。如果沒有改寫的話,那麼相應的方法就被繼承。例如foo.Foo就和foo.Base.Foo調用是一致的

 

type Base struct{

        Name string

}

 

func(base *Base) Foo(){

}

 

func(base *Base) Bar(){

}

 

type Foo struct{

        Base

}

 

func(foo *Foo) Bar(){

        /*修改Bar實現*/

}

 

在c++和java中,對於繼承都有很多關鍵字,比如private,public,protected. Go語言對關鍵字的增加非常謹慎。要是某個符號對其他包可見,需要將符號定義為以大寫字母開頭,否則無法訪問。

package cal

 

type Garden struct{

        x,y float32

}

func main(){

        var g cal.Garden

        g.x=1

}

在cal包內申明了Garden,並且有x和y兩個變數。在引用的時候會提示如下錯誤:

src\test.go:62:3: g.x undefined (cannot refer to unexported field or method x)

提示找不到x。如果改成下面的形式則可以通過g.X=1來訪問

type Garden struct{

        X,Y float32

}

 

go語言之物件導向一

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.