// inheritance_car.go package main import ( "fmt" ) type Engine interface { Start() Stop() } type Car struct { wheelCount int Engine } // define a behavior for Car func (car Car) numberOfWheels() int { return car.wheelCount } type Mercedes struct { Car //anonymous field Car } // a behavior only available for the Mercedes func (m *Mercedes) sayHiToMerkel() { fmt.Println("Hi Angela!") } func (c *Car) Start() { fmt.Println("Car is started") } func (c *Car) Stop() { fmt.Println("Car is stopped") } func (c *Car) GoToWorkIn() { // get in car c.Start() // drive to work c.Stop() // get out of car } func main() { m := Mercedes{Car{4, nil}} fmt.Println("A Mercedes has this many wheels: ", m.numberOfWheels()) m.GoToWorkIn() m.sayHiToMerkel() } /* Output: A Mercedes has this many wheels: 4 Car is started Car is stopped Hi Angela! */