golang:结构体内嵌模拟类的继承

Love The Way You Lie 2023-02-16 12:29 99阅读 0赞

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

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

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

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

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

在这里插入图片描述
使用Go语言的内嵌结构体实现对象特性,可以自由地在对象中增、删、改各种特性。Go语言会在编译时检查能否使用这些特性。

发表评论

表情:
评论列表 (有 0 条评论,99人围观)

还没有评论,来说两句吧...

相关阅读

    相关 结构体内存对齐

    结构体内存对齐规则 > 1. 第一个成员在与结构体变量偏移量为0的地址处。 > 2. 其他成员变量要对齐到某个数字(对齐数)的整数倍的地址处。 > 对齐数 = 编

    相关 golang继承——接口父

    从面向对象的角度上看,总会有一些使用子类不想做,希望父类去做的事情,在java这样的纯面向对象的语言中,方法就是使用父类和子类,子类通过继承父类的方法,实现子类自己的属性,如果

    相关 关于结构体内存对齐总结

    内存对齐计算可谓是笔试题的必考题,但是如何按照计算原则算出正确答案一开始也不是很容易的事,所以专门通过例子来复习下关于结构体内存对齐的计算问题。(编译环境为vs2015)

    相关 golang结构体内结构

    内嵌结构体 结构体可以包含一个或多个匿名(或内嵌)字段,即这些字段没有显式的名字,只有字段的类型是必须的,此时类型也就是字段的名字。匿名字段本身可以是一个结构体类型,即结