00:00
那下一个要给大家讲的呢,就是叫做撕开了超累的构造,那有时候超累是什么意思呢,大家看。就是我们的父类,或者是父类的父类,那么我们来研究一下,也因为这个超类的构造呢,也是因为继承这个导致的,所以说这块呢,也有可能有面试官会,或者说咱们在程序里面可能会看到这个超内构造的一些代码。首先我们还是老规矩,咱们简单的回顾一下Java中的超类的构造,请看说明,从我们先看一下啊,在Java中创建子类对象时,子类的构造器总是会去调用一个复类构造器,当然可能是显示的,也可能是隐示的,比如说这段代码。啊,比如说这段代码,我们来看一下这段代码。全屏一下。我们可以看到这段代码呢,这是一个A类。它这里面有两个构造器,注意听啊,我为什么这样写,因为待会你会发现是他的构造啊,它这个对副的父类的构造还是有它一个自己的特色的,尤其是在这个比如说别人给你出面试题的时候。
01:12
或者说咱们看代码的时候,千万不要产生一个疑惑,说诶怎么跟Java不一样,它就是跟Java不一样,你看这里我有两个构造器,这个大家一看应该很清楚的看到了,那么这里面是一个子类B,我继承了A,没毛病,我这里也写了两个构造器。大家看这里,同学们可以看到,在这个地方,在B里面呢,我直接说出了一句话。同学们应该马上反应过来哈,当我在这个B的构造器里边,就B小括号构造器里面,我没有写任何的调用负类,负类的这个构造器的时候,其实它默认调的是super。无参的一个构造,也就是说当我们用这个方式去构建一个B的时候,这句话会被优先输出,再输出这句话。这点大家应该有印象的,因为它这面它是隐藏了一个调用无参的复力构造器。
02:05
那么如果说我们在这个地方。去显示的调用一个参数呢,这个时候就说我调用的是哪一个呢?调用是负类的,这个构造器也是可以的。那就意味着我可以显示,也可以隐视,而且同学们可以看到Java里面呢,它的这个纸类的构造器可以去指定,它有好几个地方,就是它可以去由由这个地方去指定调了一个构造器,也可以从这指定调构造器。他的,他也就说他可以选择。但是SC里面做了限制了。开了里面你们会发现它没有这么灵活,它的指的要去调负类的构造器是必须的,但是呢,出口只有一个。不然你如果说跟这地方你不做比较,你可能会发现,诶是不是跟Java完全一样,不是的啊,我们可以从这边看出它的特点来,我们先给大家简单的运行一下啊,这段代码我们运行一下,因为时间的关系,这段代码比较简单,我就不写了。
03:09
我先给同学们写一段代码。写一段这个Java的代码,我们把这个代码跑一下,有个直观的感受,就Java的这个,呃,负类的构造器,我们比如叫做贝斯啊,Base的一个构造constructor。Constructor。好,写到这里来。Constructor,好,我们写一段代码来证明一下这个事情,因为时间关系,我就直接拿来用了啊,那同学们我们来玩一把,我们先来看看它是怎么用的,比如说我去创建一个B类的的这个对象。B类的对象,那就BB等于六。我第一种方式用最简单方法就是这个B写完了。好,那么我们来看此时此刻,在这里它会隐私调用super,也就是说你不写的话,默认有一个这个东西。
04:05
默认是有这个东西的啊,这点大家应该很清晰的知道,那么我如果这样执行的话呢,我们会看到他其实是优先调用这个A,它会输出这个东西。在这个地方会输出,第一步先输出这个。第二步。他在输出我们的这一个。B。B的这个阻隔断器的输出内容,好,我们运行一下。运行一下说老师你为什么每个都要回顾一下,直接讲不行吗?还是要回顾一下的,因为毕竟是一个课程体系吗?对吧?好,我们可以看到这是跟我们想的一样,那说明它的确是有这种机制在里面,那么我们再换一个创建方式说B。B2等于六一个B,然后呢,我在这里输入一个名字叫Jack。Jacky。好,这个时候呢,我们看它走的就是这条线,那么这个时候呢,它显示的调用是指定调用这个什么呢?Superna,那就是这个,也就是说他在他的他在他的这个构造器里面可以指定掉了一个。
05:12
但是我们发现SC里面这样写就错了。啊,这里写他是错的,那么待会我们还要说这个事,好,这个时候他调人个调superna,那就到这来了,他就输出了这句话,就A是最name。哎,同学们看。一。这个,然后输出J。然后这个负类的做完了以后呢,他又去。调用了这个B是最name里面的Jack OK,这个我相信同学们应该能看懂,好,我执行一下。可以看到这个运行机制就出来了。哎,为什么这个老是这样子的。它那个提示信息是为什么,有同学告诉我吗?哦,因为有一个代码没有保存是吧,好现在我现在我在运行就不会在弹刚才那个提示框了啊好这样就对了,看AB正确。
06:08
那么关于Java的一个这个机制呢,我就说完了,我再多问一句啊,同学们,在负类里边是不是其实也隐藏了一个super。这个输他会调谁啊?哎,Object非常好啊,同学们,这页还是object里面,因为没有任何输出嘛,就看不到了,所以他其实还隐藏了一个调这个只是呢,这上面就跟咱们写的代码没有太大关系了,所以他就看不到了,好,Java的这个回顾我们就到这里,那下面呢,就是我们开了的东西了,好,我先把这个,呃,Java的这个超类的构造给大家聊到这里,我们来整一个啊。我每个地方都是代码的设计,我都是有道理的啊,不会说突然一下写一个东西在这,好,我们把这个超类构造的回顾先给同学们拿到这里来。来,走第一个案例啊,同学们。咱第一个案例是这样写的,回顾了一下Java的构造,操内构造的一个流程。
07:06
啊,存了多少流程,那么这里面我把这个代码给大家板书到这里来。好。好的,我把这个呢写到这儿。好,然后呢,我把代码给同学们阐述到这啊,代码。OK。代码。啊,代码呢,我就直接把这个拿下来。给大家放在一个表格里边去,让大家以后呢就看的比较清晰了。对吧,然后呢,这个结论,它这个这个地方是输出的内容,大家可以看到是这样子的。啊,这是一个,这是一个。好,Java的构造期的回顾机制,我们就简单的回顾到这里。
我来说两句