参考:
http://c.biancheng.net/view/73.html
关键点
希望通过下面的关键词
,能够实现目的
:能够快速
的回忆
,理解
,复习
知识点:
1、在Go语言里,如何实现其他语言如Java中的
继承
特性呢?利用Go语言中的
内嵌结构体
特性,可以方便快速的组合
成不同特性。
在面向对象思想中,实现对象关系需要使用“继承”
特性。
例如,人类不能飞行,鸟类可以飞行。人类和鸟类都可以继承自可行走类,但只有鸟类继承自飞行类。
面向对象的设计原则中也建议
对象最好不要
使用多重
继承,有些面向对象语言从语言层面
就禁止
了多重
继承,如 C# 和 Java
语言。
鸟类同时继承自可行走类和飞行类,这显然是存在问题的。
在面向对象思想中要正确地实现对象的多重特性,只能使用一些精巧的设计来补救。
Go语言的结构体内嵌特性
就是一种组合
特性,使用组合特性
可以快速构建
对象的不同
特性。
下面的代码使用Go语言的结构体内嵌实现对象特性组合
,请参考下面的代码。
人和鸟的特性:
package main
import "fmt"
// 可飞行的
type Flying struct{}
func (f *Flying) Fly() {
fmt.Println("can fly")
}
// 可行走的
type Walkable struct{}
func (f *Walkable) Walk() {
fmt.Println("can calk")
}
// 人类
type Human struct {
Walkable // 人类能行走
}
// 鸟类
type Bird struct {
Walkable // 鸟类能行走
Flying // 鸟类能飞行
}
func main() {
// 实例化鸟类
b := new(Bird)
fmt.Println("Bird: ")
b.Fly()
b.Walk()
// 实例化人类
h := new(Human)
fmt.Println("Human: ")
h.Walk()
}
代码说明如下:
- 第 6 行,声明可飞行结构(Flying)。
- 第 8 行,为可飞行结构添加飞行方法 Fly()。
- 第 13 行,声明可行走结构(Walkable)。
- 第 15 行,为可行走结构添加行走方法 Walk()。
- 第 20 行,声明人类结构。这个结构嵌入可行走结构(Walkable),让人类具备“可行走”特性
- 第 25 行,声明鸟类结构。这个结构嵌入可行走结构(Walkable)和可飞行结构(Flying),让鸟类具备既可行走又可飞行的特性。
- 第 33 行,实例化鸟类结构。
- 第 35 和 36 行,调用鸟类可以使用的功能,如飞行和行走。
- 第 39 行,实例化人类结构。
- 第 41 行,调用人类能使用的功能,如行走。
运行代码,输出如下:
Bird:
can fly
can calk
Human:
can calk
使用Go语言的内嵌结构体
实现对象特性,可以自由地在对象中增
、删
、改
各种特性。
Go语言会在编译时检查能否使用这些特性。