Maison > développement back-end > Golang > Comment parvenir au polymorphisme sans héritage traditionnel ?

Comment parvenir au polymorphisme sans héritage traditionnel ?

Barbara Streisand
Libérer: 2024-11-06 17:36:02
original
981 Les gens l'ont consulté

How Can Polymorphism be Achieved in Go Without Traditional Inheritance?

Polymorphisme en langage Go : réussir grâce aux interfaces et à la composition

Le polymorphisme, un concept fondamental de la programmation orientée objet, permet aux objets de se comporter différemment en fonction de leur classe ou de leur type. Dans Go, contrairement aux langages OO traditionnels, le polymorphisme est obtenu via les interfaces et la composition.

Problème :

Une tentative d'implémentation du polymorphisme dans Go en utilisant l'héritage structurel comme le code suivant l'extrait entraînerait une erreur :

<code class="go">type Foo struct {
   ...
}

type Bar struct {
   Foo
   ...
}

func getFoo() Foo {
   return Bar{...}
}</code>
Copier après la connexion

Solution :

Dans Go, le polymorphisme est obtenu via les interfaces et la composition. Une interface définit un ensemble de méthodes qu'un type doit implémenter, permettant au type d'être utilisé de manière polymorphe partout où l'interface est attendue.

Le code ci-dessous montre comment le polymorphisme peut être obtenu dans Go à l'aide d'interfaces et de composition :

<code class="go">package main

import "fmt"

type Foo interface {
   printFoo()
}

type FooImpl struct {

}

type Bar struct {
   FooImpl
}

type Bar2 struct {
   FooImpl
}

func (f FooImpl) printFoo() {
    fmt.Println("Print Foo Impl")
}

func getFoo() Foo {
   return Bar{}
}

func main() {
    fmt.Println("Hello, playground")
    b := getFoo()
    b.printFoo()
}</code>
Copier après la connexion

Dans cet extrait de code :

  • Foo est une interface qui définit une méthode printFoo.
  • FooImpl est une implémentation concrète de l'interface Foo.
  • Bar et Bar2 sont des structures qui intègrent le type FooImpl et implémentent indirectement l'interface Foo.
  • getFoo() renvoie une instance de Bar en tant que type Foo, démontrant le polymorphisme.

En utilisant des interfaces et une composition, Go propose une approche flexible et efficace pour réaliser le polymorphisme sans avoir recours à l'héritage traditionnel.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal