Files
the-way-to-go_ZH_CN/eBook/exercises/chapter_10/inheritance_car.go
2015-03-03 12:25:25 -05:00

60 lines
958 B
Go
Executable File

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