Go语言学习 面向对象
2017-10-09 20:24
489 查看
首先,我们先来看一段代码示例
在这段代码示例中,我们定义了五个“类”(Go语言中没有类这个说法,但是类似于C++中的类):Human、Student、Employee。每个类都包含特定的字段。而Human则是匿名字段,默认包含了Human的所有字段。
Men是个接口(interface),包含了SayHi、Sing两个方法,它能保存所有有这两个方法的对象。就像很经典的“鸭子理论”:如果一只鸟跑起来像鸭子、走起啦像鸭子、叫起来像鸭子,那么它就是一只鸭子。鸭子是接口,我们不用管它是白鸭子还是黑鸭子,虽然他们跑的动作可能有些不同。
package main import "fmt" type Human struct { name string age int phone string } type Student struct { Human //匿名字段 school string loan float32 } type Employee struct { Human //匿名字段 company string money float32 } //Human实现SayHi方法 func (h Human) SayHi() { fmt.Printf("Hi, I am %s you can call me on %s\n", h.name, h.phone) } //Human实现Sing方法 func (h Human) Sing(lyrics string) { fmt.Println("La la la la...", lyrics) } //Employee重载Human的SayHi方法 func (e Employee) SayHi() { fmt.Printf("Hi, I am %s, I work at %s. Call me on %s\n", e.name, e.company, e.phone) } // Interface Men被Human,Student和Employee实现 // 因为这三个类型都实现了这两个方法 type Men interface { SayHi() Sing(lyrics string) } func main() { mike := Student{Human{"Mike", 25, "222-222-XXX"}, "MIT", 0.00} paul := Student{Human{"Paul", 26, "111-222-XXX"}, "Harvard", 100} sam := Employee{Human{"Sam", 36, "444-222-XXX"}, "Golang Inc.", 1000} tom := Employee{Human{"Tom", 37, "222-444-XXX"}, "Things Ltd.", 5000} //定义Men类型的变量i var i Men //i能存储Student i = mike fmt.Println("This is Mike, a Student:") i.SayHi() i.Sing("November rain") //i也能存储Employee i = tom fmt.Println("This is tom, an Employee:") i.SayHi() i.Sing("Born to be wild") //定义了slice Men fmt.Println("Let's use a slice of Men and see what happens") x := make([]Men, 3) //这三个都是不同类型的元素,但是他们实现了interface同一个接口 x[0], x[1], x[2] = paul, sam, mike for _, value := range x{ value.SayHi() } }
在这段代码示例中,我们定义了五个“类”(Go语言中没有类这个说法,但是类似于C++中的类):Human、Student、Employee。每个类都包含特定的字段。而Human则是匿名字段,默认包含了Human的所有字段。
Men是个接口(interface),包含了SayHi、Sing两个方法,它能保存所有有这两个方法的对象。就像很经典的“鸭子理论”:如果一只鸟跑起来像鸭子、走起啦像鸭子、叫起来像鸭子,那么它就是一只鸭子。鸭子是接口,我们不用管它是白鸭子还是黑鸭子,虽然他们跑的动作可能有些不同。
相关文章推荐
- Go语言学习笔记--类型、指针、面向对象
- Go语言学习笔记-变量
- go语言学习-------Go语言中使用 protobuf
- Go语言学习笔记(四) [array、slice、map]
- go语言学习-golang保留字
- go语言学习-变量
- Go语言并发与并行学习笔记(二)
- go语言学习记录3
- go语言学习-变量的问题
- 学习go语言 我的习题答案 chapter3
- GO语言学习--tcp服务器、客户机的通信
- 从例子中学习 go 语言 —— 基本语法
- 七、GO语言库学习--net/url包--go语言笔记
- go学习(十)——Go 语言范围(Range)
- Go语言学习笔记(四) [array、slice、map]
- 【GOLANG】Go语言学习-select用法
- go语言学习
- go语言学习之路 二:变量
- 【Go学习】浅析Go语言Interface类型的语法行为及用法
- go语言学习基础