オブジェクト指向プログラミングにおける golang 関数のポリモーフィズムの実装

PHPz
リリース: 2024-05-04 16:03:02
オリジナル
797 人が閲覧しました

Go 言語では、関数をインターフェイス値として保存してポリモーフィズムを実現できます。つまり、インターフェイスを定義し、一連のメソッド シグネチャを指定します。インターフェイスを実装する型を作成し、そのインターフェイスに対してこれらのメソッドを実装します。インターフェース値を入力として受け入れる関数を定義します。実際の型に関係なく、関数内のインターフェイス値のみを使用するメソッド。ポリモーフィズムを実現するには、異なる型の値を持つ関数を呼び出します。

オブジェクト指向プログラミングにおける golang 関数のポリモーフィズムの実装

オブジェクト指向プログラミングにおける Go 言語関数のポリモーフィズム実装

Go 言語では、関数をインターフェイス値として保存できるため、ポリモーフィズムを実装できます。 Go 言語自体はオブジェクト指向ではありませんが。

インターフェイス

インターフェイスは、一連のメソッドのシグネチャを定義します。インターフェイスを実装する型は、これらのメソッドを実装する必要があります。たとえば、Shape インターフェイスを定義します。

type Shape interface {
    Area() float64
}
ログイン後にコピー

型はインターフェイス

を実装します。 次のように Shape インターフェイスを実装する型を作成できます。 :

type Rectangle struct {
    width, height float64
}

func (r Rectangle) Area() float64 {
    return r.width * r.height
}

type Circle struct {
    radius float64
}

func (c Circle) Area() float64 {
    return math.Pi * c.radius * c.radius
}
ログイン後にコピー

関数をインターフェイス値として使用する

Shape インターフェイスを作成したので、関数をその値として使用できます。これを行うには、Shape インターフェイス値を入力として受け入れる calculateArea 関数を定義します。

func calculateArea(s Shape) float64 {
    return s.Area()
}
ログイン後にコピー

実践的なケース

ここで、ポリモーフィズムがどのように実装されるかを示す例を作成してみましょう。

func main() {
    // 创建一个 Rectangle 和一个 Circle
    r := Rectangle{width: 2, height: 3}
    c := Circle{radius: 5}

    // 使用函数计算他们的面积
    areaR := calculateArea(r)
    areaC := calculateArea(c)

    fmt.Println("Rectangle area:", areaR)
    fmt.Println("Circle area:", areaC)
}
ログイン後にコピー

出力:

Rectangle area: 6
Circle area: 78.53981633974483
ログイン後にコピー

この例では、calculateArea 関数は、渡された Shape インターフェイスの Area のみを使用します。実際の型が RectangleCircle であるかに関係なく、メソッド内で使用されます。これはポリモーフィズムの具体化です。

以上がオブジェクト指向プログラミングにおける golang 関数のポリモーフィズムの実装の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!