Maison > Article > développement back-end > Comment Go parvient-il au polymorphisme sans héritage traditionnel ?
Dans Go, un langage de programmation connu pour sa simplicité et sa concurrence, le concept de polymorphisme prend une forme unique. Le polymorphisme, un élément essentiel de la programmation orientée objet, permet aux objets de différentes classes d'être traités comme des objets de leur classe parent ou interface.
Considérez le scénario suivant dans un langage orienté objet traditionnel :
type Foo { ... } type Bar : Foo { ... } func getFoo() Foo { return Bar{...} }
Dans un tel scénario, getFoo() devrait renvoyer de manière transparente une instance de la classe Bar, en tirant parti du polymorphisme. Cependant, dans Go, cette approche entraîne une erreur, soulignant que getFoo() doit renvoyer une instance de la classe Foo.
L'approche de Go en matière de polymorphisme diffère légèrement. Pour reproduire la fonctionnalité décrite précédemment, Go utilise des interfaces et une composition :
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() }
En implémentant l'interface Foo et en composant la structure FooImpl, le type Bar assume les responsabilités de l'interface Foo. Par conséquent, getFoo() peut renvoyer une instance du type Bar, qui adhère à l'interface Foo.
Grâce à ces mécanismes, Go fournit une forme de polymorphisme qui, bien que distinct de l'héritage orienté objet traditionnel, permet le traitement dynamique des objets en fonction de leurs interfaces.
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!