00:00
我们再来看一下面向对象编程里面的另外一个重要的概念,叫多肽。多肽这个概念,那我们来看一下何为多肽。首先呢,我们看一个基本介绍,多肽指的是什么呀?它是变量。或者说我们叫实力,它具有多种形态,那我们就把它叫做多肽,那么这个呢,多肽是面向对象里面的第三大特征,这里大家有个基本认识,在勾浪里面,多肽是通过接口来实现的。也就是说在勾浪里面呢,接口它体现出它能够体现出多态这个特征。能理解我的意思吧,就是说在工浪里面。接口可以体现出多态这个特征,那什么意思呢?说比如说我们可以按照统一的接口来调用不同的实现,这时接口变量就呈现出不同的形态。那我举个例子。我举个例子给大家讲一讲,大家还记不记得我们在前面讲过一个叫做USB接口的案例,大家还有印象吗?当时我们定义了一个接口变量叫USB,它既可以接,既可以接收。
01:13
手机变量又可以接受相机变量,这时USB这个接口就体现出一种多态的特征来,我们回忆一下,打开我们前面讲的这个章节,就是接口快速入门,打开它,我们来看一看当时我们是怎么写的,首先呢,我们定义了一个接口,还有印象吧,叫USB接口,里面呢有两个方法。然后我们用phone。实现了这两个方法,当然phone实现了这两个方法,就相当于实现了这个接口,没问题吧,同时我们定义定义了一个camera camera呢也实现了这两个方法,也就是说camera这个结构体也相当于实现了这个接口。然后我们做了一个事情,当时我们这定义了一个方法叫walking里面呢可以接收一个USB这样的一个变量。
02:09
还有印象吧?大家看到这个USB其实就是一个接口变量。就是一个接口变量,当时我们怎么做的,大家看到。我在这里可以传一个phone进去。我也可以传一个camera进去,还有印象吧,而且呢,大家有没有发现你之所以可以把这两个。这这两这两个变量,一个是破结构体的变量,一个是camera的结构变量。传给这个USB口,为什么?就是因为你这两个变量对应的结构体实现了这个接口,是不是这个道理?没问题吧,而而且有一点特别有意思的情况就发生了,当你传了一个phone进去,当你调用的时候,它自动的就能判断这个USB指向的是一个phone。
03:01
而当你传的是camera这个变量的时候,它就自动的知道这个USB指向的是一个camera这个结构体的变量。所以说。这个USB就已然呈现了一种多种状态,什么中种状态呢?它会自动的根据运行的这个上下文环境来判断USB到底是一个camera还是一个phone,因此这个USB就其实就体现出多态了,能理解我的意思吧。所以说在这里呢,这个快速入门老师就不再重新敲了,为什么?因为前面我们已经讲过这个多肽的特点,只是老师呢,再把它点了一下啊,点明了,我就直接点明了这个特点。点名。直接把它说清楚了,就在这里,好,这个就是这个,其实前面讲的这个地方就体现出这个多肽,这个也就是说这个USB。变一个变量会根据根据传入的,传入的这个实例。
04:05
来判断时差啊,叫时差,这样子叫时差。来判断。来判断到底是一个缝。还是?还是一个camera。能理解吧,看到没有好,其实这个地方就已然体现出多肽了,这个地方就体现这个USB,它在这里就体现出一种多肽,其实呢,这个就是我们叫做多态参数。啊,多态参数好,同学们,我把我把这个地方给大家先板述一下啊,板述一下来走一个,这叫面向对象编程的多态。我们整理一下。回到这里来,往下拉。OK,跟上老师思路,那现在呢,我们新开一个章节叫什么呢,面向。面向对象编程之多态。对吧,我给他一个新的标题,来一个标题二。
05:03
是这意思吧,然后呢,我们把这个放一下。这里呢,我们只能一个叫做基本介绍和快速入门,跟上老师思路。基本介绍。好,我给他一个。呃,标题三。没问题吧?标题三快速入门,我也给他一个板书,标题三,那这个快速入门呢,我们在前面讲过了,因此呢,我把这一段核心代码也给同学们再次放过来,对不对?大家有一个印象在哪里体现出多态的呢?就在这里。是这个意思吧,同学们。A。再看这里。老师把这个地方就直接点题了。是不是这个USB这里就体现出多态了?这个USB。USB这个接口变量。这个接口啊,变量就体现出。
06:00
体现出。多多肽的特点。多肽。的特点能理解啊。接住多肽的特点,好,我把这个呢给大家整理好,放到我们的这块位置来。跟着老师思路,那既然如此,我们就来再来给大家说一下,那在我们勾浪里面,这个多肽的特征,除了在这地方能体现出来,还有哪些地方也可以体现出多肽这个特征呢?非常的简单,来同学们看一下在这里。呃,接口体现出多态,就是在勾能勾浪里面,主要是接口体现出多态的,里面呢,又分两种,第一种叫多态参数。多态参数,这个在前面讲的这个特这个地方,这个就是叫做多态参数。因为USB它体现出多种状态,我们把这种叫做多态参数,除此之外呢,还有一种方式也能体现出多态,叫多态数组。
07:01
多肽数组,我举个例子啊,我举个例子。好,我举个例子,那比如说现在有一个USB数组。里面呢,存放可以存放这个范文结构体,还可以存放camera结构体,甚至我还可以通过这个呃,不同的方式来调用作文里面特有的方法,这个呢,我后面再讲啊,我们讲讲完这个类型推导以后,呃,类型断言以后我们再讲这个,我们先来说一下这个USB数组里面能不能既存放这个放结构体,还同时还可以存放这个camera结构体,我们先把这个讲清楚。然后呢,后面这一部分呢,我们再讲这个类型断言的时候再加进去,能理解老师的思路吗。好,我们来看看多肽数组是怎么体现的理解,好,来,我把这地方也给同学们阐述一下,叫多肽。接口,接口体现多态的两种方式,两两两种方式啊就是接口。
08:03
接口体现多态。多肽的两种形式。两种形式,哪两种形式呢?跟上。第一种形式第一种形式就是刚才老师所说的什么呢?叫做多态参数。对不对,多态参数我来反述一下,第二种形式呢,我们叫多态数组。好多态参数,其实刚才我们这个案例就是多态参数,那么为了大家有个印象呢?好的,我把这个给大家。放到这里反述一下,没问题吧,还有一个多肽数组,多肽数组是个什么意思呢?就这样子的演示一个案例。演示一个案例,就是说我给你一个USB数组,里面可以存放phone结构体和camera结构体的变量,也就说它既可以存放phone结构体实例,又可以存放camera,大家都知道go里面它本身你这个你这个数组是什么类型,只能存放。
09:07
这种类型,比如说你是int类型的,你就不能存放一个十寸。放进去对不对?但是当我们用这个接口过后呢,其实你是可以存放实现了该接口的任何结构体的变量,因此这地方就体现出多态数组的特点。那我给大家举例说明一下。来跟上思路,案例说明。来吧,我们打开这个课件,我们新建一个文件夹。还在这里?还在这里啊,同学们跟上老师思路多肽呢,我们一般叫Pony。Pony,哦,Pony就是多态的意思,就是一个简写啊,一个简写来吧,main.go。嗯,因为时间的关系,因为时间的关系呢,老师就不想从头到尾再重新写一遍了,我直接就拿这个我们原先讲过的这个USB来给大家做案例演示好不好,我把这一段代码呢,呃,我用的上的这一段代码呢,拿来为我所用。
10:09
跟上老师思路好不好?好,现在呢,我已经把这段代码拿到了,我粘贴拷贝份,大家看这里,目前呢有个USB接口,有phone,还有camera,他们实现了这个接口,现在我们来做一个数组。好,来。Fun。走我们来定义哦,叫声明也可以啊,定义也可以定义一个USB接口。呃,数这个接口数组。接口数组可以存放。存放这个放。和camera。Camera的结构体变量。结构体变量,好,我们来试一试,看看能不能成功啊,这个就是体现出多态数组。这里就体现出多肽。
11:03
多肽数组能理解啊,那现在呢,我们先来定义一个吧,同学们跟着老师思路,首先呢。为VR一下。我写个叫USB,然后呢,我们放三个元素进去啊,三个三个这样的一个,呃,元素进去,那现在呢,我们定的是USB,大家看清楚了没有。是不是这是一个数组里面放的是USB这种这种这种实现了USB这个接口的这种结构体的变量能理解哈,那现在我们可以来试着往里面放一点东西进去,嗯,首先呢,我给同学们先打印一下。我们看看当我们不放任何东西的时候,里面存的是什么?来,我们跑一个代码。好的,那现在呢,我们CD点点,然后。Did到刚才我们写的Pony。然后DR,我们go run main.go跑起来,请看效果,此时此刻我们可以发现都是空的,那正常,因为你根本就没有互动性进去嘛,对不对?好,现在呢,我们往里面放点东西进去。
12:10
USB。Are?第一个元素。我给他放一个什么呢。我就给他放一个手机。没问题吧?好,紧接着我放第二个元素。第二个元素呢,我们又放一个手机。好的,第三个。第三一个元素呢,我们这次不放phone了,我们放一个camera。Camel。好,这单词写错了,Camera,好,我们现在再来跑一跑,看看能否运行起来。我们可以看到此时此刻呢,有三个了,只是里面没放东西,空的好,为了能够你看你看同学们看到啊,你你在这里数字里面其实你放了有相当于说两种结构体了,一种是form,一种camera,如果你不用,你不用接口啊,你不用接口是绝对放不进去的,能理解我的意思吧,就你不用接口这种多态的特点,你是不可能在一个数组里面又放phone的变量,又放camera放不进去的。
13:12
那我们怎么实现呢?我们其实是用的多肽这个特点来实现的。能理解吗?你们想一想啊,想一想我们前面讲数组的一个特点,我们原先讲数组的时候,老师反复讲过,一个数组只能放一种数据类型,但是你看目前我们既可以放form,还可以放former,呃,Camera,为什么?就是因为利用了接口的这个多态的这个特点啊,接口能够体现多态这个特点来实现这个功能的,那大家想一想,那以后我们要实现这种这种方式的话,就可以利用这个多态这个数组来,呃,这种方式来实现这种需求,对不对?好,为了能够看到区别呢,干脆我这里呢再给他来个名字好吧。Name。是。好,我也给他来一个名字,Name。好朋友们,现在呢,我为了看到这个效果,我给他直接赋个值,比如说这个是VIVO手机,VIVO。
14:06
这个呢,我们叫小米。好,这个相机我们叫什么呢?叫尼康。哦了,我们可以看到再次运行看效果。我们看到这个效果已经出来了,看到没有,你看这里放的是VIVO是两个手机,这方放的是个相机,尼康能理解哈,而且呢,他们的数据类型肯定是不一样的,对吧,一个for,一个camera,但是我们可以统一的放到一个数组里面去,就利用了多态数组这个特点,好同学们,那关于关于我们所说的这个多肽数,多肽的这个数组呢,我们就给大家演示到这里,大家好好的体验一下。来吧,我把这段代码呢给同学们直接。放到。板书到我们的笔记里边去,跟上思路啊,同学们。好,我插一个。小的表格。
15:00
没问题吧?跟上思路就可以了,好同学们,那关于这一个。接口,呃,接口体现多态的特征的两个,我们就给大家介绍完毕了,也就是在实际工作中,重点也就是这两个。这两个,那么后面还有这个特有方法调用呢,我们学习完类型断言过后再回头说这个事情OK。好,那关于多态我们就给大家介绍这里,因为多肽呢,在功能里面,其实它主要就是接口实现,没有像其他的传统的oop语言里面那么复杂,对不对,所以说老师呢,介绍到这里,大家掌握这两这些就够了啊,就在开发里面。使用就没有问题了。好,这个这块我们先给大家介绍到这里。
我来说两句