C語言中文網 目錄

Go語言結構體內嵌模擬類的繼承

在面向對象思想中,實現對象關系需要使用“繼承”特性。例如,人類不能飛行,鳥類可以飛行。人類和鳥類都可以繼承自可行走類,但只有鳥類繼承自飛行類。

面向對象的設計原則中也建議對象最好不要使用多重繼承,有些面向對象語言從語言層面就禁止了多重繼承,如 C#Java 語言。鳥類同時繼承自可行走類和飛行類,這顯然是存在問題的。在面向對象思想中要正確地實現對象的多重特性,只能使用一些精巧的設計來補救。

Go 語言的結構體內嵌特性就是一種組合特性,使用組合特性可以快速構建對象的不同特性。

下面的代碼使用 Go 語言的結構體內嵌實現對象特性組合,請參考下面的代碼。

人和鳥的特性:
package main

import "fmt"

// 可飛行的
type Flying struct{}

func (f *Flying) Fly() {
    fmt.Println("can fly")
}

// 可行走的
type Walkable struct{}

func (f *Walkable) Walk() {
    fmt.Println("can calk")
}

// 人類
type Human struct {
    Walkable // 人類能行走
}

// 鳥類
type Bird struct {
    Walkable // 鳥類能行走
    Flying   // 鳥類能飛行
}

func main() {

    // 實例化鳥類
    b := new(Bird)
    fmt.Println("Bird: ")
    b.Fly()
    b.Walk()

    // 實例化人類
    h := new(Human)
    fmt.Println("Human: ")
    h.Walk()

}
代碼說明如下:
  • 第 6 行,聲明可飛行結構(Flying)。
  • 第 8 行,為可飛行結構添加飛行方法 Fly()。
  • 第 13 行,聲明可行走結構(Walkable)。
  • 第 15 行,為可行走結構添加行走方法 Walk()。
  • 第 20 行,聲明人類結構。這個結構嵌入可行走結構(Walkable),讓人類具備“可行走”特性
  • 第 25 行,聲明鳥類結構。這個結構嵌入可行走結構(Walkable)和可飛行結構(Flying),讓鳥類具備既可行走又可飛行的特性。
  • 第 33 行,實例化鳥類結構。
  • 第 35 和 36 行,調用鳥類可以使用的功能,如飛行和行走。
  • 第 39 行,實例化人類結構。
  • 第 41 行,調用人類能使用的功能,如行走。

運行代碼,輸出如下:
Bird:
can fly
can calk
Human:
can calk

使用 Go 語言的內嵌結構體實現對象特性,可以自由地在對象中增、刪、改各種特性。Go 語言會在編譯時檢查能否使用這些特性。

精美而實用的網站,提供C語言C++STLLinuxShellJavaGo語言等教程,以及socketGCCviSwing設計模式JSP等專題。

Copyright ?2011-2018 biancheng.net, 陜ICP備15000209號

底部Logo