Go语言-【结构体】-结构体内嵌模拟类的继承

在面向对象思想中,实现对象关系需要使用“继承”特性。例如,人类不能飞行,鸟类可以飞行。人类和鸟类都可以继承自可行走类,但只有鸟类继承自飞行类。

面向对象的设计原则中也建议对象最好不要使用多重继承,有些面向对象语言从语言层面就禁止了多重继承,如 C# 和 Java 语言。鸟类同时继承自可行走类和飞行类,这显然是存在问题的。在面向对象思想中要正确地实现对象的多重特性,只能使用一些精巧的设计来补救。

Go语言的结构体内嵌特性就是一种组合特性,使用组合特性可以快速构建对象的不同特性。

下面的代码使用Go语言的结构体内嵌实现对象特性组合,请参考下面的代码。

人和鸟的特性:

 
  1. package main
  2. import "fmt"
  3. // 可飞行的
  4. type Flying struct{}
  5. func (f *Flying) Fly() {
  6. fmt.Println("can fly")
  7. }
  8. // 可行走的
  9. type Walkable struct{}
  10. func (f *Walkable) Walk() {
  11. fmt.Println("can calk")
  12. }
  13. // 人类
  14. type Human struct {
  15. Walkable // 人类能行走
  16. }
  17. // 鸟类
  18. type Bird struct {
  19. Walkable // 鸟类能行走
  20. Flying // 鸟类能飞行
  21. }
  22. func main() {
  23. // 实例化鸟类
  24. b := new(Bird)
  25. fmt.Println("Bird: ")
  26. b.Fly()
  27. b.Walk()
  28. // 实例化人类
  29. h := new(Human)
  30. fmt.Println("Human: ")
  31. h.Walk()
  32. }

代码说明如下:

  • 第 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语言会在编译时检查能否使用这些特性。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值