00:00
那同学们可以看到啊,首先我们来看。Skyla的构造呢?我这里一共总结了大概有这么两点需要同学们知道的,第一个我们看这里。开了超类的构造说明第一点内有一个主构造器和任意数量的辅助构造器,这个在前面我们说过了,而每个辅助构造器都必须先调用,主构造器也可以间接调用,说过了,那么我们直接给他看一个代码,看看这个地方它会输出什么内容啊。好,这个代码呢,我已经准备好了,一个是person。呃,一个是继承了他的person,我们把这个流程简单再再看一下,好来看一个案例,好把这个案例先拿过来吧,SC的一个构造写到这来。好,新建一个文件。好写个object叫什么呢?Scanner。是开了的一个base constructor。
01:00
好,然后呢,点啊这个就不点了啊往下走写一个主方法。好,把这个代码写到这,我们来整理一下,同学们看这边这个逻辑呢,特别简单哈,它是这样子的。我这里有一个副类。有一个负类是person。好,这里面呢,我这里故意写了一句话,叫生三这边输出一个person,好,然后这是一个子类。这是一个子类,这个子类呢,他是干什么呢?他继承了啊这个employee,他继承了,他继承了这个person啊,这个名字可能到时候也得改啊,咱们改成这个600了该。好,这个改一下,不然的话待会肯定有名字重名啊。600好,那这600是不是已经有过了。刚才在提示。哦,好家伙,他是有了好像。那得还得升升下级啊700。诶,700它是上面没有啊700,因为这个名字不好写,不好想哈,我又不想把它写在一个文件里面去,所以只能这样子了,那么大家看这里呢,这是主构造器,然后这是this,这是this,这是一个辅助构造器。
02:15
对吧,辅助的构造器,诶构造器,然后这里面呢,我调用了一下主构造器。啊,这个地方如果不写的话会报错的。不写肯定是报错写上啊,然后这里面呢调它,最后调它,我们现在呢,来构建一个子类啊v l employ等于六一个EMPLOYEE700。好,同学们,我们在执行之前,我们自己来分析一下流程,然后再执行啊,我们分析一下它的执行,执行流程好第一步。首先。同学们注意。注意你在这儿调的时候呢,其实它是等价于这个写法。
03:00
它是等价于这个写法,也就是说当我们去走这个地方时,它是先去执行ten后面的这个代码,即执行这个东西。再说一遍啊,首先先执行的是啊,我们先说,因为因为斯开了仍然遵循遵遵遵守,遵循什么呢?遵循遵呃遵守,只开了遵守。遵遵守什么呢?遵守先构建啊,先构建负类的,负类的部分,那么这样子的话,他其实先执行的是这段代码ex后面这个东西。当然说老师参数怎么传进去呢?待会儿我们再说啊,如果你这有参数也是可以通过这个地方传进去的,那即第一步,那这样子它就会先执行这个这面的内容,那就先输出了person这句话。Person的一句话,好,这是第一个动作,紧接着呢,这个做完了以后。
04:03
这个做完以后呢,他就去执行它本身的这个阻隔周期。也就是说他先执行。这个负类的构造器,呃,这个构造器,然后呢,他自己在执行这这句话好,第二步执行什么呢?就这句话。哎,这句话,这句话是什么呢?是我们employee的足够到期。这也是他也是要执行的EMPLOYEE700的主构造器。好,紧接着呢,第四一步,第四一步他就去执行自己的下面这个代码,那这个时候呢,他会把这个值付给他,这肯定的。啊,这个肯定不用,不用怀EE,好,然后再执行这句话好,我们这个地方执行的效果就是person employee employee。这个辅助过去我们执行一下。好跑一个代码。哎,怎么怎么又有变化了啊。
05:00
好,我们可以看到跟我们,诶怎么没有跑起来,不对呀。啊,对不起啊,对不起,刚才我们分析的有点小问题。因为我这没传参数。我这地方大家看我刚才分析的有个小问题,就是前面都是对的,这对一,这这个也是对的,那为什么没有说出这句话,是因为我在这个地方直接掉的就足够到气。哦,我没有调这个啊,我没有调这个,如,如果我调这个的话就对了啊,这个地方是。从这个来看是没有这句话的,什么时候有这句话呢?下面我这样写就可以了,EMPLOYEE2等于六,一个EMPLOYEE700,如果我传的有参数值,比如说叫做啊这个marry。如果这样子的话呢,呃,那就是还是执行先执行它,再执行它,最后执行这个辅助构造器,好,那这样子下面这个代码就应该是执行的刚才一样的了。啊,这个就是。这个地方就会执行刚才我们说的这句话啊,这个就没有这句话。好,为了以示区别呢,我给他来一个换行。
06:04
好,写到这。好,我们执行一下。好,我们自己一下看,这个结果就应该跟刚才分析的一样了。更一样好,讲到这我们再做一点小小的扩展,小小扩展,那么我们现在来写一段代码啊,如果我这样写了,我们来看代码有没有什么改变。来,同学们,如果我在这加了一个东西,代码会不会报错?比如我这里面有个name。比如说叫做P死罪。好,同学们可以看到,当我这样一写呢,马上就报错了。那报,但是我也把这个给他。皮内。那么报错的原因,同学们可以看到是在这里,因为你在这调用的时候,同学们看到你在这调用的时候,他先走这个地方,他说哦,你要去调用一个PERSON700的一个构造器,没有,因为你主造器。
07:04
有参数。那这个时候怎么办呢?如果一定要把这个代码填完的话,那你没有办法,你。你就这样子。这这种情况有两种,那就你反正一定要给他提供一个方法,那就这样写了,那我就假设我就要这样接受你就this。This,好,我专门写一个方法。好,然后这个地方也要调它父类的构造器,主构造器那地方我们就随便填一个值吧,比如说一个默认啊,默认的名字。Word的名字。好,然后这样就可以了,那这样代码就过了,那这样子的话,我们来看执行流程是什么样子呢。假如我这样写啊,我们来看看这个执行流程是什么样的,我找一个同学分析一下,比如现在我们再看一个案例EMPLOYEE3。我找一个同学说一下他的执行流程啊,Employee,我还是传入。
08:00
我还是该传入一个,比如说传入一个叫做叫史密斯。好,我们来分析。分析执行执行的顺序。执行的这个顺序。执行的顺序。好,我找一个东西,说第一部书是什么啊,我找一位同学名字叫做李大帅,来说说明一下。大帅来说一下第一步应该输出什么这个。这个东西应该输出什么?Person。是这个是吧。是输出这个person是吧,第二个呢。默认的名字。是这个是吧。第三个还有输出吗。还有输出没有。我往下面看一下,可以下面看一下。
09:06
还有没有输出。史密斯穿的是史密斯。还有没有输出。啊,要是emp。好,第四一个还有吗。是不是按你的说法,应该只有这个可输出了是吧?好,是这个逻辑,那么请坐下啊,大帅请坐下,我们来执行一下,看这个结果是跟他分析的有没有,呃,是不是一样的好看一下,那么为了好看呢,我这打出一些信号,进行一个间隔,来,同学们执行一下。好,我们看下这个顺序啊,走一个啊,刚才我点一下那个就对了,老提示我。好,我们可以看到,呃,这个根。我们想的好像是有一点区别是吧,是不是默认的名字。
10:04
没,呃,这个不是打印的。这个默认的名字,我这应该没有打印。是吧,我们也打印,那如果说我们把把这个名字打印一下看看啊,他可能想看一下这个地方,比如说我们这把这个名字打印一下。好,打一下,我们再来看这样子跟他。想的是不是一样的,走执行一个。好,我们可以看到person默认的名字employ辅助构造器是正确的,完全正确啊,这个它分析的是OK的,我们简单再看一下流程来走一下,首先它执行EMPLOYEE700。那么这个时候呢,他会找到哪一个呢?其实这时他找的应该是这个构造器,对吧?哎,他找,那么他找这个构对不对啊是这样子,我刚刚才说找他虽然是找的这个构造器。找这个过的,他其实是这样的,同学们,刚才我们这个说的是有点小问题啊,他其实仍然是先走这段代码。
11:08
你看啊,虽然你这写的是这个构造器,但是它找到这过后,实际上这地方是不是又掉我们这个掉这个主构造器了是吧?哎,所以说你传了一个史密斯,他走的是的的确是这,但是你这必须要调主格造器,所以说他又到这来了。他一到这呢,准备执行的时候,发现,诶,这个它是继承了一个person的,于是乎他就会去找这个person对应的那一个构造器,哪里呢,这。这,那么他找到这儿的时候,他知道我这个地方。也调用了它的阻隔到就是负类的阻隔到期,是不是这个道理,于是他就先执person,那person完了过后呢,再去执行。默认的名字,好,这个这件事情就做完了,做完以后呢,他去执行自己的主格,因为这还没他把他刚才那两句输出,只是把它做完了。
12:06
还没有走,他自己的阻隔到期呢,于是他又走employee点点点,最后才执行这句话,因此呢,刚才这个分析是正确的,好,这个我们就说到这里啊,说到这里这是可以的,好同学们,那关于这个第一个这个流程我们就说完了,好把这个撕开了的组。超累的构造器的第一个点,我们整理一下。啊,也不难,就是把这个流程给他走一下,你们知道就OK。因为你们现在呢,也并不是说呃,并并不是说是零基础的,所以是这都提一嘴你们就知道了。好,往这一写,那么把代码给大家板书过来,把代码给大家书过来。好,刚才呢,我们举了这样一个小案例,加深了一下对超内流程流程的一个说明。
13:02
好,写到这,那紧接着呢,我们来看第二个地方,注意同意这是语法了。注意听,只有主构造器可以调用复力构造器,这个很很郁闷。也就是说我们这个子类,它能够去调用复类,它只能找一个。你看原先甲网呢,我可以选对吧,在这里呢,主构造器可以调用,副类构造器只有它可以,那么辅助构造器不能直接调用负类的构造器,在斯开勒构造器中,你不能用super来调用,那我举个例子,请看这段代码。请看这段代码,比如说。大家看这里,我这里有一个person。是个夫人。那么这里有个employee,这个employee的参数怎么传传给他呢?可以传。就是刚才我们在研究一个问题,说我在去构造。一个子类的时候,我怎么有没有办法把子类构造的参数传给他,可以你看这这样就可以传过去。
14:06
也就是你在地方通过这个主构造器,行三可以传给这个副类的这个构造器,但是这个构造器是谁,你可以选择。你可以选择那这样这个写法是可以的,将子类的参数传给父类的构造器,这种写法是OK的,但是注意啊。我们不能够在这里面直接调S。这个在主构造器是不能掉的,你看你说老师可能有些人想我我super.name一下,这个是错的。你也不能在,也不能在辅助构造器中调用负类的构造器,也就说你这样写也是错的。你这样写也是说的,那么我们简单的给大家演示一下。比如说。我我就以这个为例吧,比如说你不能这样写,说老师我想在这去调用一下super的一个无偿构造器。那么这张就直接报了,错了。
15:02
这是在这儿不能用,刚才已经说过了,那么你在这个辅助构造器里面也是不能掉的。啊,你你也是不能掉的,你super也是不能掉的。好,你看这也是不能掉的。也就说我们不能在这方直接调它的出口,只能从这,就是我要去掉负类的一个,呃,歌德器,我只能从这从这个地方走,也说不能,不能让你想选择,那当然行参我们要传进去也是可以的,比如说说老师假设我这方要要去给这个PM进行一个构造,可不可以呢?也可以,你比如说像像我这样写一下啊,同学们写下代码。我写一个一。我待会儿找一个同学说一下这个结构是什么。师尊。好,然后呢,我可以把这个内通过这穿进去。那如果说我这样一写的话。我这样一写的话,同学们啊,我这样一写的话。我在这钓的时候,你看。
16:00
这时employee,我再传一个这个东西。你看这地方报了一个错误,我看是什么原因啊。这上面employee这些都错了,这是为什么呢?这个地方的原因是不是因为我这个有两个完全相同的构造器,是不是,哎,所以说为了以示区别呢,咱干脆这样子做,我再加一个以示区别,我纯粹为了区别,所以说呢,大家看一下1NAME1我就随便写一个啊。好,可以这样就过了。这样就够了,那么大家看这个地方就代表我能穿这个,我我给他写一段,我重新再构建一个。而而且大家可以看到啊,我这个副类去用你的这个参参数我是可以选择的。也就说你有两个我用一个也行,你有三个我用一个可以,你你你甚至有两个,我一个都不用也是可以的。因为我有我的选择。我有我的选择,好,那现在呢,我再重新构建一下,我待会儿找一个同学说一下这个结果是什么。
17:01
来测试一下。在。再测试一把,OK,好,VRNP4等于又一个employee,然后呢,这时我们传一个名字叫Terry。然后再传一个十。哎,这个时候我们可以看到他报了一个错误,我看是什么原因导致的。这个地方是哦对七七百啊,没有没有那400了,大家看这里我们来分析一下啊,如果这样走的话,其实它是这样走。把这它它是不是直接走到我们的主构造器,然后再调person的一个in name就走到这来了,对走呃不是走到这啊走走的是这这这个啊,刚才说错了,走到这,那走到这的话呢,我们来看一下,那这个时候是不是它先输出person。他是不是要输出这个person好,输出这个person以后啊,输出这个person以后,那么是不是负类这个事就。
18:01
就就完了,是不是就完了呀,没事了,因为我这就走他嘛。好,这就完了,名字是不是也给他了,就相当于PM是不传进去了啊,这个也就是说这个PM也完成了,那就是说这个地方呢,到此这个这一步,我们的这个name就已经这个时候这个name啊,注意同意这个name就已经是T了。Terry。好,然后呢,这个做完了以后,他去走他自己的主构造器,这个时候会输出employee,这个时候跟辅助构造器没有关系的同学们。好,那么走到这边来,走到这边来了以后呢。是不是就就就完事了,就完事了,好,那么我们可以这样子啊,我们输出一下这个名字,好吧,我们输出一下,比如说受银凤。受益,我们看看是不是Y。是Y,好朋友们,我们输出一下,好,我们就说这个雇员的名字的名字是。
19:00
哎,是多少呢?我们进行一个简单的输出,就是我们就直接输出这个PM。呃,是内还是P内啊,是name name。拿过来了啊,其实这个地方呢,我们就可以获得,那么我们再来调用一下employee,点首for,好,这个方应该输出是carry。这地方应该输出是雇员的名字为TRY,对不对,诶这样就可以了,来我们运行一下啊,让大家应该很清晰了,再测试一把,好,首先会输出这句话,再输这句话,最后输出固院的名字,为了好看呢,我给大家来一个分割符号,这个分割符号我们换一个别的符号啊。的百分号,好,同学们请看执行效果好,给我们分析的对不对?啊,代码有问题。呃,这上面的问题是什么原因?哦,是不是我把那个都拿掉了,没有了是吧?这有两个参数的构造器,这有一个,那我再补一个啊,再补一个。
20:03
啊,算了,这个就不补了啊,这个补来补去太麻烦了,我就干脆把它先注销好吧,先注销一下就完了,好,同学们,我们执行一下。好,这个时候我们一执行呢,我们可以看到最后结果跟我们想的是有问题,这哪里写错了,那就错了。嗯,我们看这里。Overloedloed method with。哪我哪地方写错了,大家看。哪一句话写错了,同学们?同学们看看哪地方我写错了。我们来看看哪个地方写错呢?同学们看这个地方的错误呢,同学们可以看到,诶错误的原因,人家告诉你第五十五行有错,其实就这因为你这东西调你你是调自己主构造器,主构造器已经有参数了,所以语法上是过不去的。所以你看这个这个SC在这个地方写的就啊就大家要注意这个细节,那为了语法通过呢,我们先这样传进去吧,好吧,Name。
21:07
呃,然后再给他传一个默认的一个名字吧,好吧,默认一个年龄,比如默认年龄是100岁。好,这样子我们再来执行一下。诶,这刚才这地方他不报错,还是有点讨厌啊,有点讨厌好我们再执行一下。走一个,诶是这样的代码吗?是的。好,我们看看这个时候执行的结果呢,就不报错了,看这里person没问题,Employee没问题,雇员的名字是turn啊turn它返回这么一个信息啊,我们就把它说出来了啊,这个信息就是我们想要的信息,好,同学们,那关于这个小案例呢,包括它的一个语法的总结,我们就说到这儿给大家板述一下啊。好,这个就过了。这就够了。好,那么关于代码呢?我给大家整理一下A代码。代码另外一个呢,就是刚才我这个地方的一个示意啊,就能说明说明,我也给大家整理到这里。
22:05
说明大家把这个流程搞清楚就可以了啊,说明好这个流,这个说明呢,我就干脆用这个幻灯片,这里面的代码呢,我单独的给它粘一份,哎,这是说明。这是说明。代码部分呢,我就把这个地方拿过来啊,代码把它拿大家到时候去看一看啊,看一看也不难啊也不难。我们将这一段代码给大家板述到。这个笔记中去。去。好的好的,我们截取一段时。
我来说两句