74_Go基础_1_41 结构体匿名字段

 1 package main
 2 
 3 import "fmt"
 4 
 5 // 1.定义父类
 6 type Person struct {
 7     name string
 8     age  int
 9 }
10 
11 // 2.定义子类
12 type Student struct {
13     Person        // 模拟继承结构
14     school string // 子类的新增属性
15 }
16 
17 func main() {
18     /*
19         面向对象:OOP
20 
21         Go语言的结构体嵌套:
22             1.模拟继承性:is - a
23                 type A struct{
24                     field
25                 }
26                 type B struct{
27                     A //匿名字段
28                 }
29 
30             2.模拟聚合关系:has - a
31                 type C struct{
32                     field
33                 }
34                 type D struct{
35                     c C //聚合关系
36                 }
37     */
38 
39     // 1.创建父类的对象
40     p1 := Person{name: "张三", age: 30}
41     fmt.Println(p1)
42     fmt.Println(p1.name, p1.age)
43 
44     // 2.创建子类的对象
45     s1 := Student{Person{"李四", 17}, "千锋教育"}
46     fmt.Println(s1) // {{李四 17} 千锋教育}
47 
48     s2 := Student{Person: Person{name: "rose", age: 19}, school: "北京大学"}
49     fmt.Println(s2) // {{rose 19} 北京大学}
50 
51     var s3 Student
52     s3.Person.name = "王五"
53     s3.Person.age = 19
54     s3.school = "清华大学"
55     fmt.Println(s3) // {{王五 19} 清华大学}
56 
57     s3.name = "Ruby" // 可以简写
58     s3.age = 16      //
59     fmt.Println(s3)  // {{Ruby 16} 清华大学}
60 }