开发者学堂课程【Go 语言核心编程 - 面向对象、文件、单元测试、反射、TCP 编程:继承基本语法】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/626/detail/9692
继承基本语法
内容简介:
一、继承基本介绍和示意图
二、嵌套匿名结构体的基本语法
一、 继承基本介绍和示意图
1. 继承基本介绍
(1)继承可以解决代码复用,让编程更加靠近人类思维。在现实生活中也有继承的概念,比如儿子会继承父亲的财或产一些特性或一些基因等等。
(2)当多个结构体存在相同的属性(字段)和方法时,可以从这些结构体中抽象出结构体(比如刚才的 Student ),在该结构中定义这些相同的属性和方法。
(3)其他的结构体不需要重新定义这些属性和方法,只需嵌套一个Student 匿名结构体即可。
(4)也就是说:在 Golang 中,如果一个 struct 嵌套了另一个匿名结构体,那么这个结构体可以直接访问匿名结构体的字段和方法,从而实现了继承特性。可以发现 Golang 里学的面向对象编程比 Java 简单许多。
2. 示意图
打开 Excel 文件,在上一节中写了 Pupil 和 Graduate 两个结构体,它们各自有它的一些字段和绑定方法,同时在写 Graduate 时可以发现它里面的很多字段和方法与 Pupil 里的字段和方法是相同的。继承首先会将 Pupil 和 Graduate 里面共有的字段和方法提取出来,且保留 Pupil 和 Graduate 它们独特的属性和其特有的方法,然后再想一个办法使它们形成继承关系,注意继承的概念和很多编程语言是靠一个关键词完成的,并不是靠 Graduate ,它为了体现继承效果用了匿名结构体,也就是把共有的 student 的名字嵌入 Pupil 和Graduate 里,这样就无需再重写 student 里面共有的字段和方法了。在 Golang 里它实现继承是靠在结构体里嵌入一个匿名结构体,这样便实现了继承,这个和很多的 OOP 语言不一样, Golang 把面向对象编程弱化了,它不希望结构体之间有太多封装和继承在里面,包括后面在学习接口时也能体现这个特点。示意图如下:
二、嵌套匿名结构体基本语法
type Goods struct { //Goods 是商品/货物的意思。任何一个商品或/货物都有其名字和价格
Name string
Price int
}
type Book struct {
//结构体为 Book
Goods
//这里就是嵌套匿名结构体 Goods
Writer string
}
Book 也是一种商品,若不想把其名字和价格再写一遍,那么就可以嵌套匿名结构体 Goods ,这时 Book 结构体相当于拥有了 Name 和Price 这两个字段;当你想把 Goods 引进来时,可以用和 Goods 绑定的方法。