面向对象编程三大特征3

多重继承介绍:

结构体的匿名字段是基本数据类型,如何访问,下面代码输出什么?


匿名字段练习:

type Monster struct {
  Name string
  Age int
}

type A struct {
  Monster
  int //匿名字段是基本数据类型
  n int
}

func main() {

  //演示一下匿名字段基本数据类型的使用
  var a A
  a.Name = "狐狸精"
  a.Age = 300
  a.int = 20
  a.n = 40
  fmt.Println("a=", a)
}

说明:

1)如果一个结构体有int 类型的匿名字段,就不能有第二个。

2)如果需要有多个int类型的字段,则必须给int字段指定名字。


多重继承说明:

如一个struct 嵌套了多个匿名结构体,那么该结构体可以直接访问嵌套的匿名结构体的字段和方法,从而实现了多重继承。

案例演示:

type Goods struct {
  Name string
  Price float64
}

type Brand struct {
  Name string
  Address string
}

type TV struct {
  Goods
  Brand
}

func main() {
  tv1 := TV {Goods{"电视机001", 5000},Brand{"海尔", "山东青岛"},}
  tv2 := TV {
    Goods{"电视机002", 5000.99},
    Brand{"西门子", "北京"},
  }
  tv3 := TV {
    Goods{
      Price : 4000,
      Name : "电视机003",
    },
    Brand{
      Name : "夏普",
      Address : "上海",
    },
  }
  fmt.Println(tv1)
  fmt.Println(tv2)
  fmt.Println(tv3)
}


多重继承细节说明:

1)如嵌入的匿名结构体有相同的字段名或者方法名,则在访问时,需要通过匿名结构体类型名来区分。

  tv1 := TV {Goods{"电视机001", 5000},Brand{"海尔", "山东青岛"},}
  fmt.Println(tv1.Goods.Name)
  fmt.Println(tv1.Price)

2)为了保证代码的简洁性,建议大家尽量不使用多重继承

猜你喜欢

转载自www.cnblogs.com/green-frog-2019/p/11415398.html