capypad
0 Tage Serie
go / beginner
Snippet

Interfaces und Polymorphismus

Interfaces definieren Verhalten durch Methodensets ohne sie zu implementieren. Typen implementieren Interfaces implizit durch Bereitstellen aller erforderlichen Methoden. Eine Variable eines Interface-Typs kann jeden Wert halten, dessen Typ das Interface erfüllt, was Polymorphismus ermöglicht.

snippet.go
go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
package main
import "fmt"
 
type Speaker interface {
Speak() string
}
 
type Dog struct{}
 
func (d Dog) Speak() string {
return "Woof!"
}
 
type Cat struct{}
 
func (c Cat) Speak() string {
return "Meow!"
}
 
func main() {
var s Speaker
s = Dog{}
fmt.Println(s.Speak())
s = Cat{}
fmt.Println(s.Speak())
animals := []Speaker{Dog{}, Cat{}}
for _, animal := range animals {
fmt.Printf("Says: %s\n", animal.Speak())
}
}
Erklärung
1
type Speaker interface { Speak() string }
Interface deklariert erforderliche Methode(n) ohne Implementierung
2
func (d Dog) Speak() string
Dog implementiert Speaker implizit durch Bereitstellen der Speak()-Methode
3
var s Speaker
Interface-Variable kann jeden konkreten Typ halten, der es erfüllt
4
animals := []Speaker{Dog{}, Cat{}}
Slice von Interface ermöglicht einheitliches Verarbeiten verschiedener Typen