76_Go基础_1_43 方法继承

 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 // 3.方法
18 func (p Person) eat() {
19     fmt.Println("父类的方法,吃窝窝头。。")
20 }
21 
22 func (s Student) study() {
23     fmt.Println("子类新增的方法,学生学习啦。。。")
24 }
25 
26 // func (s Student) eat() {
27 //     fmt.Println("子类重写的方法:吃炸鸡喝啤酒。。")
28 // }
29 
30 func main() {
31     /*
32         OOP中的继承性:
33             如果两个类(class)存在继承关系,其中一个是子类,另一个作为父类,那么:
34 
35             1.子类可以直接访问父类的属性和方法
36             2.子类可以新增自己的属性和方法
37             3.子类可以重写父类的方法(orverride,就是将父类已有的方法,重新实现)
38 
39 
40         Go语言的结构体嵌套:
41             1.模拟继承性:is - a
42                 type A struct{
43                     field
44                 }
45                 type B struct{
46                     A //匿名字段
47                 }
48 
49             2.模拟聚合关系:has - a
50                 type C struct{
51                     field
52                 }
53                 type D struct{
54                     c C //聚合关系
55                 }
56 
57     */
58 
59     // 1.创建Person类型
60     p1 := Person{name: "王二狗", age: 30}
61     fmt.Println(p1.name, p1.age) // 父类对象,访问父类的字段属性
62     p1.eat()                     // 父类对象,访问父类的方法
63 
64     // 2.创建Student类型
65     s1 := Student{Person{"Ruby", 18}, "千锋教育"}
66     fmt.Println(s1.name)   // s1.Person.name
67     fmt.Println(s1.age)    // 子类对象,可以直接访问父类的字段,(其实就是提升字段)
68     fmt.Println(s1.school) // 子类对象,访问自己新增的字段属性
69 
70     s1.study()      // 子类新增的方法,学生学习啦。。。
71     s1.eat()        // 子类重写的方法:吃炸鸡喝啤酒。。
72     s1.Person.eat() // 父类的方法,吃窝窝头。。  依然可以访问父类的方法
73 }
原文地址:https://www.cnblogs.com/luwei0915/p/15630288.html