ホームページ > バックエンド開発 > Golang > Go はどのようにして従来の継承を行わずにメソッドのオーバーライドを実現するのでしょうか?

Go はどのようにして従来の継承を行わずにメソッドのオーバーライドを実現するのでしょうか?

Mary-Kate Olsen
リリース: 2024-11-16 00:55:03
オリジナル
710 人が閲覧しました

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"
}
ログイン後にコピー

利点:

  • の既存の動作を保持します。 Get() をオーバーライドする mogelijkheid を提供する際のベース

合成を使用した代替アプローチ:

  1. 元の型を埋め込み、オーバーライドする実装を含む構造体を定義します。
  2. オリジナルにアクセスするには埋め込みタイプを使用します

例:

// 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
}
ログイン後にコピー

利点:

  • 単一の型定義を維持追加のインターフェースを必要とせずにtype.

注:

  • このアプローチを使用すると、元の型の動作を前提とする既存のコードが壊れる可能性があることに注意してください。
  • Go は合成とダックタイピングに重点を置いているため、従来の継承ベースではなく、メソッドのオーバーライドにインターフェイスを使用することが好まれています。オーバーライド。

以上がGo はどのようにして従来の継承を行わずにメソッドのオーバーライドを実現するのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート