00:00
那我们来看一下继承的基本介绍和它的一个原理示意图。那继承它最大的作用呢,就是要解决前面的一个问题,什么问题啊,就是代码复用的问题,继确实是这样子的,待会呢,大家一看就会看到继承它真的可以把代码复用性给你解决。然后呢,有了继承过后,让我们的编程更加靠近人类的思维,为什么呢?大家想一想,在我们现实生活中,我们其实也也是有继承这个概念的,比如说一个儿子他会继承父亲的一些财产呢,对不对?继承他父亲的一些特性呢?继承他父亲的一些基因呢等等,是吧?在现实生活中有这样的东西,那么那么当一个结构体,当多个结构体存在相同属性和方法的时候,就可以从这些结构体中抽象出一个结构体,比如说刚才的student,在该结构体中定义这些相同的属性和方法。诶,这个呢,可能大家要要有一个基本认识,那么这样子,为了让大家听得明白呢,我画一个图,帮助大家理解这句话什么意思,好打开我们的这块,我们打开示意图,Excel文件。
01:12
来,我们来看一下继承的这么一个概念。继承的这么一个概念,我们来走一下。同学们可以看到,在这里。我们前面写的有这么两个结构体,对不对?一个结构体呢,我们叫做pupil。PUPIL。是吧,这个结构体里面是不是它有它自己的属性,我或者叫字段吧,我们干脆叫字段,还有什么呢?还有它的,可它绑定的方法没问题吧,那同时呢,我们可以看到我们再写一个graduate。就是大学生的时候呢,Graduate。Graduate,那么这里面呢,也有我们的字段和方法,但是大家发现这个字段,这里面的字段和方法和graduate里面的字段和方法有很多它是相同的。
02:06
那么继承他会怎么做呢?他会这么思考,他说干脆这样子。你们呢,把pupil和graduate里面共有的字段和方法提取出来,就说比如说我写一个student学生,那么我把它共有的属性,共有的就是共有。共有的字段还有什么呢?方法,共有的方法。共有的方法提到这里来,提到这里面去,然后这边呢,注意这里面的这个字段呢。我们就把它拿到上面去了。拿到上面去对不对,那么就拿到graduate,但是pupil和graduate如果它有自己独特的属性,它有自己特有的,它这里面可以保留什么呢?保留特有的啊,就说自己特有的。特有的字段,还有特有的。
03:01
特有的这个方法就可以了,同样呢。也可以拥有自己独有的,就是它特有的字段和和方法,这些特有的字段和方法呢,并不是。两个结构体共有的部分,我把共有的提到上面去,然后我想一个办法,让什么呢?让他们形成一个继承的关系。哎,我让他去继承他。各位,我让他去继承他。我也我又让这个graduate去继承student,那么这里面呢,有个关键词叫继承。对吧,诶这个地方我重新写个。重新来一个啊,叫继承。好,继承他。那么注意这个继承的概念啊,嗯,在其他很多编程语言里面呢,继承它是通过一个关键字来完成的,叫,但是在go浪里面呢,它的这个继承形成它并不是靠graduate,它是什么样呢。
04:02
他为了实现这个继承效果,其实他用的一个叫做匿名结构体。应结构体。匿名。结构体。也就是说我把这个student。我把这个student这个结构体的名字往这一放就行了。同样的道理。我想让graduate。我想让graduate去继承student里面的字段和方法也很简单,我在这个结构体里面,我加一个什么呢?匿名结构体student就可以了。也就是说,在我们的。勾浪里边它实现这个继承呢,是靠在你的这个结构体里面嵌入一个匿名结构体名就可以了,这里就实现了继承,这个跟很多的oop语言它是不一样的啊,注意它这是这就实现了。这里就实现继承小继承的特性。
05:00
同样这边也是一样,对不对。我把这个稍微拉大一点。所以这边呢,它也是一样的,它就实现了这个继承的特性。OK,实现继承特性。没,没问题吧,同学们,实现基层的特性。那这样子呢,我们就可以。把student里面共有的字段和方法不用重写了,我们不用重写了,就说我只要只要把这共有部分提到一个,提到一个student,然后呢,我让别的这个地方把它。把它嵌入到pupil或者嵌入到graduate,那么我就相当于拥有了student这个结构体面的字段和方法,我就可以用它了。但是呢,在这个勾里面呢,它一般也不会把16帧的叫负类,也不会把它叫子类,这它就是一个很简单,一个很松散的一种关系,明白吧,所以说同学们如果你学过Java的话呢,你也不用老去对比哦,老师,这个这个时间段的是不是叫负类,这个pupil是不是叫子类,呃,不用这么去,也不用这么去想。
06:03
不用这么去讲,他呢就是实现这种特性,你就认为勾浪里面它通过嵌入一个匿名结构体就可以实现这种什么呢?叫继承的这个特性就可以了,不用去把这个继承关系理的那么清楚,能理解我的意思吧,因为我刚才反复讲过,勾浪呢,他对这个面向对象,他其实是弱化了的,他不希望我们的这个结构体之间有那么强的一种。呃,这个封装呀,或者继承这种关系在里边,它是一种很松散的,包括后面我们学到接口编程也能体现出这种特点,明白OK,好,所以说这样子一个继承的特性它就形成了。那么我把这个关系图呢,给他拉过来。这个就是它的一个关系图明白。好,有了这样一个关系图过后呢,OK。呃,我们把它整理一下对吧,就是刚才我们把在针对这个文件再说几句话啊,大家看,当多个结构体存在相同属性或者方法的时候,我们可以将这些结构体抽象出,抽象出一个结构体,比如比如说student,在该结构体中定义这些相同的属性和方法,或者叫共有的,对吧,你看这。
07:10
共有的字段或者是方法,然后怎么办呢?其他的结构体不需要重新定义这些属性或者方法,注意这个属性就是我这写的字段,呃,属性就是字段的意思啊,再说一遍,不要在这搞混淆了。字段就是我这说的字段,就是这个幻灯片里面说的属性。理解这意思吧,然后只需要嵌入一个student的匿名结构体就可以了。那这个示意图就是老师画了这么一个示意图,你这里还是可以保留自己特有的啊,同学们说老师我是pup里面有些跟他不一样,怎么办,你该怎么写还怎么写。就说你。你你想有特特有的,你该怎么写就怎么写就完了。好,同样,这边也是一样,然后也就是说,在勾勒中,如果一个结构体嵌入了另外一个匿名结构体,那么这个结构体就可以直接访问匿名结构体的字段和方法,从而注意听这句话,实现了继承的特性,就这么简单。
08:08
所以说你看在学功浪里面,它的这个面向对象编程比什么呀,比那个Java要简单很多啊,反复讲的这个东西好,我把这个呢给同学们放到板书,到我们笔记里面去,OK。板书到我们笔记里面去,讲的是继承基本介绍和他的示意图,来一个标题三。对吧,这是他的一个说明,这有几段文本啊,几段文字。好,那么这个示意图呢?这个示意图我给同学们拿过来。这个示意图。刚才老师画了一个示意图。在哪里,在这?我把它拿过来,好吧,追听。没,没有问题吧,这个理解起来应该没有太大难度,那么既然有了这个结构体的一个示意图过后呢。我们。就再来看一下它的嵌套,匿名题的一个基本语法,怎么样实现这个嵌套呢?比如说同学们看我这里有一个结构体叫购置货物的意思,里面呢,有名字,还有价格,我们都知道。
09:15
任何一种商品啊,都会有名字,有价格对吧。那么现在呢?我有一个结构体叫book。我们认为不可也是一种商品,Good就是商品的意思吗?我们认为顾不可也是一种商品,那么怎么样搞这个事情呢?那就这样做的,那我那我不想再把这个名字和价格再重新写一遍,就说我不愿意在这里面再重新写一个,诶把这个name对吧寸。写上去,然后再把价格写一次,我觉得这个太麻烦了,怎么办呢?你可以不用这么写,你直接。给我再这么嵌套一个固执匿名结构体就行了。就说你不要去给他名字啊,就是匿,这里就嵌套一个匿名结构体,故值,那么此时此刻你的这个book。
10:03
这个结构体就相当于拥有了这个故事里面的name和price这两个字段。明明白的意思吧,那么当然再说一句,那你如果把这个故执引引入进来,那么你当然也可以用固执里边的这个跟这个故执绑定的什么呀,绑定的方法。能理解意思吧,好,这个呢,就是我们所说的它的一个基本语法,我也把它反述一下。这是我们嵌套结构体的基本语法,给他板述一下,OK,然后呢,我们把这个案例给大家拿过来,这是一个语法介绍。没问题吧,下面呢,老师就要开始举一个具体例子了,基本语法大家看能懂了吗?基本语法是不是还是比较简单,包括它的这个原理,包括继承的这个原理和它的基本语法,大家看有没有问题。啊,有没有没没有没有什么问题,那么这块先说到这儿,大家先领会一下,下边呢,我们就准备举一个案例来把这个匿名,把这个继承给大家唠叨两句。
我来说两句