首頁 >後端開發 >Golang >Go如何在沒有傳統繼承的情況下實作方法重寫?

Go如何在沒有傳統繼承的情況下實作方法重寫?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-16 00:55:03710瀏覽

How does Go achieve method overriding without traditional inheritance?

Golang 方法重寫

在Go 中,方法重寫的概念是使用介面來實現的,而不是像Java 中那樣透過繼承來實現。介面定義方法的契約,但不指定其實作。

在Go 中實作方法重寫:

使用介面:

  1. 用你想要的方法簽名定義一個接口override。
  2. 定義一個實作介面的類型,並提供重寫實作。
  3. 在原始類型中,使用介面類型作為要呼叫的方法的參數已覆寫。

範例:

// Interface for Get() method
type Getter interface {
    Get() string
}

// Base type with original implementation
type Base struct{}

func (base *Base) Get() string {
    return "base"
}

// Custom type with overriding implementation
type Sub struct {
    Base
}

func (sub *Sub) Get() string {
    return "Sub"
}

優點:

  • 優點:

保留基礎,同時提供覆蓋基礎() 的mogelijkheid

  1. 使用組合的替代方法:
定義一個嵌入原始類型並包含重寫實現的結構。

使用嵌入類型存取原始

// Sub type with composition
type Sub struct {
    Base
    custom string
}

func (sub *Sub) Get() string {
    // Access the original method via embedded Base
    if sub.custom == "" {
        return sub.Base.Get()
    }
    return sub.custom
}

範例:

  • 優點:

優點:

  • 維持單一類型定義無需額外介面
注意:請注意,使用此方法可能會破壞假定原始類型行為的現有程式碼。 Go 對組合和鴨子類型的強調有利於使用介面進行方法重寫,而不是傳統的基於繼承的覆蓋。

以上是Go如何在沒有傳統繼承的情況下實作方法重寫?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn