// 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!
*/
