00:00
那接着的话呢,我们看一下这个super呢,来调用一下这个构造器的问题,哎,我们这写一个3.4,哎,Super或者我们这专门的再写一个四这样啊super的使用这呢,我们主要呢指的是调用呃属性和这个方法,诶专门写个四叫super来这个调用构造器行这个问题,那super的话呢,既然表示呢叫负类的,那显然掉的负造构造器呢,也是负类的构造器。就是这样的一个问题,好保存一下,那么我们回到咱们这个情况来看student student的话呢,目前咱们是写了两个构造器,那我们还可能会去写第三个,第四个,那比如说我现在写一个叫student student的话呢,我们写一个string型的,一个name in型的age,然后string类型的叫major。这个构造器的型参呢,前两个参数我们就想给我们造的student呢,这个name和A属性呢去赋值,这个呢就还用这个属性去赋个值就可以了,这个major这块好说,还用它去付就行了,然后的话呢,这个name和age怎么付呢?目前负呢,其实还好说,我这个负类当中呢,没有把这个权限给它放小,你想我要是把这个权限写成private了。
01:24
这个你回到student这块呢,是不是就不能说这次点了对就不能这样写了,目前的话呢,这样写还是可以的,但是呢,我们要是把这个权限给它放小以后,这就不能写了,有同学可能会想说,那我就在这写this.set name啊,这点set age可以吧,其实是可以的。其实可以的,但是呢,一般也都不那样去写,那我们还有更好的方式去做这个事儿,怎么做呢?就是咱们通过这个叫super的方式,Super呢,咱们讲过这次加形态列表了,那super呢,其实也很好理解,Super加形态列表的方式呢,就是你调的是负类的那个指定构造器,我们现在在复类中定义过这样的构造器,那我在这呢,我就可以student,我这呢就把这个name和A呢放进去。
02:18
哎,那此时掉的呢,就是附类当中指定这两个参数的,前面一个是string,后边是个int这个类型的一个构造器,你看我点一下这个,按住CTRL键一点就点到这来了。哎,就是这样的一个情况,哎,保存一下。好,那咱们呢,在这举个例子,我呢叫STUDENT1又一个student out,斜杠一下,我们呢,就用这个参数比较多的,这上写一个TOM12岁啊12岁那就没什么专业了。21岁。这个。It也没这个专业,其实啊,It里边涉及到这个专业就太多了啊,这个我就写了一个这样的一个方向啊,然后的话呢,我们在这个student当中。
03:13
这呢还有个授方法,这个授方法我们这个内幕A呢,其实也都调用了,其实就已经给它附上值了,我们可以看一下啊,调一下这个售。诶,你会看到我们这个name和age呢,确实是附上了,诶这个时候附上呢,就是由于我们在这个构造器当中调用了这个super这样的一个方式。好,那我们首先呢,把这个过程说一下。诶,4.1说呢,我们可以在这个子类的构造器中这个显示的。使用,使用这叫super形态列表的方式。
04:01
通过这样的方式表示呢?叫调用,调用负类中声明的指定的辅导器。首先呢,你负类中,你这写了一个什么样参数,负类得有那个号题,你不能这个没有,你自己乱写,那肯定就报错了,行,这是我们说的第一个问题。我们可以在这个子类的构造器当中,这样的方式呢,去调浮力中的构造器了,这是第一个事儿,第二事儿,我们这个super形三列表这种方式的话呢,跟我们讲Z呢,有一点是一样的,就是如果我们在构造其中用的话呢,也必须呢给它生命在首行。啊,也就是说我们这个修形态列表这个的方式。的使用说必须声明在子类构造器的首行首行。那么这次呢,是不要用到首行super呢,也要用在首行,一个呢表示调本类中重载的构造器,一个呢表示调用负类中指定的构造器,那它俩呢,都想出现在首行,那是不是就意味着我们在一个类的构造器当中?
05:15
Z次形态列表或者super形电表是不是只能二选一啊,哎,这个我们说明一下啊,说我们在类的构造器中说呢,构造器中说针对于这个Z次型电列表,或者呢,说我们说的这叫哎super型的裂片。一个呢表示调用本类中重载的其他的构造器,一个表示负类中指定的构造器,说针对于它或它只能二选一。就是你不能俩都选,那俩都选总得有一个放上边,一个放下边,那放下边那个就不是首航了。哎,只能二选一,不能同时出现,诶这个呢应该就很好理解。
06:04
好,这个事儿呢,我们说清楚了,这个说清楚以后呢,我们再说一个情况,再说个情况,咱们刚才说了,说我们可以用构造系手,可以用这词,可以用super,那你说我要是谁都不用呢,像这样。对吧,像这样呢,我们首行是不是我既没有写,这次又没有写super呀,我们说像这种情况下呢,其实它也有一个东西,对,这就是默认的行为,默认的呢,就是这个叫super空。我们之前呢,用这个S,我调的时候一调说,哎,这个没见过咱们删掉,其实删不删它都在,只是你给删了看不着而已,怎么证明这个事呢?那也很简单,你看我这边没有,没有的话呢,我刚才说了默认掉的叫super空,那我把这个person这里边写一句话。说我。
07:04
我啊,无处不在。写了这样一句话,然后我们在这个位置,其实这块就能看出来了啊。我我我在下边专门的再写一下。看这个星号那个下边我们去扭一个对象。这个叫S2。我们主要看这。执行大家看。我们明明呢造了一个student的对象,这里边呢,谁也谁也没写,但是你会发现呢,它其实掉了我们这个副类当中的这个空参了super沃空了,就这样,哎,包括这块这块你没写的也有一个叫修说空。我这呢,只是给他加上而已。所以这个事儿呢,我们也写上,也就是说当我们在构造器的首行呢,既没有显示的使用Z形态列表或者是修克形态列表时,那么默认调用的是super空这个在构造器的构造器的这个首行说既没有啊,或者直接说吧,就没有显示的声明。
08:25
没有显示的声明,这次形电表或者修克形电表则默认调用的是负类中这个叫空餐的构造器啊,也就是我们这个super空餐。也就是他啊这呢是我们说的一个新的一个知识点,大家呢,得需要去体会一下,这个事儿的话呢,其实在咱们上午写的这个练习当中呢,也有所体现,只是我在这个时候呢,给大家把这个事儿呢给规避掉了,大家看我这呢加一条线。
09:01
加了一条线,然后我呢,造一个圆柱的对象。造了一个圆柱对象了,现在的话呢,我去输出一下圆柱的体积。圆柱这个我们就拿这个它来说的好,大家看这个事儿啊,我这儿呢,调的是我们子类的空参构造器,你空三构造器呢,对我们这个LAS呢进行初始化了,那我们要求体积的话呢,你肯定知道还得求,还得知道这个底面的这个半径,那我们现在呢,你可能从形式上来看,我只是对这个lengths呢进行了初始化,没有对我们的这个。是不是半径初始化呀?显示的你好像没看到,那显示这个声明的时候呢,这块又是个0.0,没有,这这是你在构造器中写的。
10:00
可能你会误认为说此时的话呢,我要求这个圆柱的这个体积的时候呢,底面这个半径啊,是不是可能会是0.0。你可能会有这样的担心,如果要是0.0的话呢,那求体积是不是一定也是零啊对,那我们执行一下。看。你会发现呢,它这时体积不是零,那正好呢,就是这个派,那说明呢,它就把这个底面这个半径呢,当成是1.0来算的了。那它既然能够当成1.0算,肯定是因为它设置过值,在哪设置的呢?那只能说是在我们父类中的这个构造器中设置的。怎么就掉他了呢?你这个位置是不是有一个修若空啊。哎,我们没有写,但其实呢,它也存在。也就是说,当我们通过这个子类的构造器去造对象的时候呢,它一上来就先奔到我们这个circle这个位置了。先呢,就把底面这个圆的半径给你初始化了,然后呢,又回过来,你把这个这个高也给做了一个初始化,所以呢,我们求面积呢,就是3.14。
11:10
是这个原因造成的,行,我把这个呢,我就删了。那还可以有个办法去证明,大家看我把这个circle这个位置呢,我给他啊,这个这个不行了,因为我们这呢,只写了一个构造器哈,我我我再加一个。行,我这写俩构造器,写俩构造器呢,我把这个构造器呢,你看啊,我注释掉,我一注释掉它这块呢,就该报错了,为啥错呀,对他默认是修波空,你负雷是不是没有修波空啊,他就报错了,你看这时候他错误信息。说这个休克的构造器是一个它是吧,你现在不是调修波空吗?说这没定义。
12:04
哎,说你必须得给指定一个构造器啊,像这种错误呢,大家后边呢会出现。就是你写了个父类写乐子类,刚写完这个子类,其实你看这个我要把它也注释的话呢,它这个错误它就蹦到这了,这怎么去理解。能理解不,其实是一个事儿,我们现在呢,我把它注释掉了,你这个是不是有一个咱们说过构造器没写,是不是有个默认空仓了,你默认空仓构造器,你的首行是不是又默认的修破空啊,修破空这块又没有,这不就报错了吗?这个错误大家呢,后边可能会见到,就是呃,写了一个类,又写了它的一个子类,刚写这个子类呢,就报错了,说我这啥也没干呢,就报错了,这时候呢,可能就是由于你这个里边有一个空默认空参构造器,而你负类当中呢,你又没有提供空仓构造器,它就错了,像这个时候呢,我把它打开,相当于负类中给你一个空参了,那这时候呢,是不是立马就没事了。
13:10
因为呢,你这有个空参默认的修报空呢,也有这就不错了嘛,就这个原因后边呢,大家就能会去分析了,嗯,主要这个保存一下,主要归结一个点,就是呢,我们构造题的首行你没有显示的写这次或修复的时候呢,哎,它就是一个super空。是这样的原因,好,那么把这个三跟四啊,这个刚才我们测试完了,大家回过来看这个三跟四,我说这样一句话,你看对吗。我说一个类的构造器可能有多个,那么构造器的首行我说呀,不是,这次就是super,只能是二选一,没有其他情况。对吧。哎,不可能有别的。不可能有别的。
14:01
而且呢,再说一句话,一个类呢,可能有多个构造器,那么不管你有几个,我就统称为N个了哈,那么N个构造器当中,至少有一个是用了super的方式调负类构造器了。因为咱们前面讲过一句话,说一个类有N个构造器,说最多呢有N减一个,使用这次,那你没用那个呢,没用那个,你这最多有N减一个,是不是就意味着至少还剩一个,那剩一下那个是不是就一定是super克了,因为刚才咱们又说了一句话,说你这个勾造起手啊,不是他就是他。你看我这个是不是非常的严密啊,把这个事儿呢,咱们写一下啊,C25,那刚才那句话我就不写了啊,就说这个你看其实我这也已经写过了,这两个呢,只能二选一。就是不是它就是它只能是这俩里个里边其中一个,这句话呢,就是在构造器在内的多个构造器中说呢,至少有一个类的构造器。
15:06
中使用了这个修这种方式。嗯,使用它呢来显示的呢,叫调用负类的中的这个构造器。说在类的多个构造器当中,至少有一个类的构造器呢,使用了它表示呢,就调用负类的构造器,不可能全是Z的,全是Z次呢就会出现咱们前面讲过那个就是成了一个环了,就是吧,哎,就出不来了就行,这就是说的这个问题。那么他为什么一定会出现这样一个情况呢?就是因为咱们这个,你想想咱们造一个student,咱们说了说这个内存层面你造好的这个对象,这是这这是对啊,这是呢,叫S指向你堆空间中造的这个对象,我们说在这个堆空间当中的子类对象里,一定会有负类中的这个结构吧。
16:05
傅雷中的属性是不是一定会有啊啊,那你怎么就有了呢?就是因为他掉过这个super,其实这块的话呢,我还可以再说一句话,但是这句话呢,其实再说就说成了咱们下一个知识点要讲的此类类这实例化的过程了啊,这句话呢,我就先不说了啊,一说就说到那儿了啊,先把这个呢停一下。
我来说两句