Polimorfism
Polimorfismul reprezintă capacitatea de a adopta forme multiple. În mod specific, în articolele anterioare a fost discutată utilizarea interfețelor, pentru care diferite structuri pot fi conforme. De exemplu:
package main
import "fmt"
type Vehicle interface{
move()
}
type Car struct{ model string}
type Aircraft struct{ model string}
func (c Car) move(){
fmt.Println(c.model, "se deplasează")
}
func (a Aircraft) move(){
fmt.Println(a.model, "zboară")
}
func main() {
tesla := Car{"Tesla"}
volvo := Car{"Volvo"}
boeing := Aircraft{"Boeing"}
vehicles := [...]Vehicle{tesla, volvo, boeing}
for _, vehicle := range vehicles{
vehicle.move()
}
}
În acest caz, este definit un array vehicles, care conține un set de structuri care sunt conforme cu interfața Vehicle, adică obiectele Car și Aircraft. Așadar, obiectul Vehicle poate adopta forme diferite: fie structura Car, fie structura Aircraft. Când se parcurge array-ul, pentru fiecare obiect se apelează metoda move. Și în funcție de tipul real al structurii, este determinată dinamic implementarea metodei move care trebuie apelată pentru fiecare structură.
Ieșirea în consolă a programului:
Tesla se deplasează
Volvo se deplasează
Boeing zboară