Goには継承という概念がない。そのため構造体をうまく利用して埋め込む
- 埋め込みを使う
- オーバライドはラッパークラスにレシーバを実装
package main
import "fmt"
type Foo struct {
name string
}
func (f *Foo) Hello() {
fmt.Println("Hello", f.name)
}
type Bar struct {
Foo
}
func (b *Bar) bye() {
fmt.Println("Bye", b.name)
}
func (b *Bar) Hello() {
fmt.Println("Hello2", b.name)
}
type Oui interface {
Hello()
}
func main() {
var f Foo
f.name = "taro"
f.Hello() //-> Hello taro
g := &Foo{"jiro"}
g.Hello() //-> Hello jiro
h := &Bar{Foo{"hanako"}}
h.Hello() //-> Hello hanako
h.bye() //-> Bye hanako
var o Oui = &Bar{Foo{"ginta"}}
o.Hello()
}