00:00
那么讲完这个修货以后,我们结合这个继承和这个修货呢,提了一个叫子类对象实例化的全过程,这个事的话呢,大家作为一个了解就可以了。做一个了解就行,就是这个事儿你要不清楚,实际上呢,不影响大家写代码。为啥呢?因为你知道从结果上来看,它体现为就是继承性,继承性你懂了,那其实呢,就不影响大家去写代码了,也就是说呢,从这个结果上来体现呢,就是当我们这个继承了父类以后,此类当中就获取了父类中声明的属性和方法。这个事儿呢,咱们讲继能性说的就是这个点啊,这个你记住以后呢,其实就不影响你写代码了,当我们在创建子类对象的时候,对空间中就会加载父类中声明的属性,这个事呢就很清楚,这是这样的这个两句话。好,这就过了,所以说这个事儿的话呢,大家很很容易去理解了,这个从过程上来看的话呢,这我们就多说了一下,说为什么我们造一个此类对象,你凭啥对空间中就有负类中这个结构呢?那肯定是因为我们负类中这个结构呢可以加载过,那就问什么时候加载的,这那就涉及到这个问题了,就是我们从过程上来看的这个事儿。
01:26
就是这个问题了,CTRLS一下这个事儿的话呢,大家脑子里边去浮现这个图,就别干去看这个文字了。看这个图,这CTRLC一下CTRLV,就当我们呢,去调个dog的时候啊,用一个dog的时候,我们说啊,一定你会调用到animal以及animal的类creature以及creature的类object,那有可能你不是这样的几层了,但是总之呢,我们说do呢,它一定直接或间接的会加载咱们object当中的这个结构了。
02:02
正因为你加载过它的所有的副类中的这个结构,所以说呢,我们这个才可以在内存中你看到负类中声命的这个属性,乃至于说你去调用负雷中声明的方法,都是由这个原因造成的,那这里边呢,就离不了这个this和super这两个关键字的支撑,哎,离不了这个支撑,具体这两个的细节呢,咱们休克这块呢,都讲了,这个理解不好的,下来再看一看这个事情,这呢就我们说体现为这一个全过程,而且呢,咱们还说了,说这个this和super呢,还必须得写到你构造题的首行,你看我这个PPT里边还有一页,就这一页。这一页这个图呢,看着是稍微复杂点,其实呢,这个比较好理解,简单说一下这个流程,当我们现在想造个对象了,我想造个对象的话呢,你得调一个构造器,你调构造器,那这时候就得问了,你这个构造器的首行,你得看是用的this呀,还是用的super呀,而且只能二选一,如果呢,你要是用的是这次好,那这次呢,它就蹦到这了,相当于你去调你自己本类中的其他的这个构造器了,那你本类中其他的构造器的首行又得看是这次啊还是super呀,如果你要这次啊,那再接着调你这个四级的这个构造器,这又回到这儿来了,如果你要是写的super克呢,Super克呢,其实又就相当于蹦到这来了一样。
03:27
就是你你要写的super,那super呢,你就接着看看你掉负类,那就跑到负类,这负类这块呢,又得看首行的构造器,构造器的首行是这次还是super是这次,那就相当于跑到这一样,是super那就相当于是跑到这一样,所以进而就一直一直加载加载加载一直到呢,咱们会加载到这个,你看object的为止,Object占个位置,这个图呢,看着其实稍微吃力点,就不如呢看这个图呢更形象一些,那在这里边呢,提到了两个问题,说呢为什么super复啊和这调用语句,这是调构造器的,说不能呢同时在一个构造器中同时出现啊对,因为他俩呢都要出现在首行,那所以呢,你只能是写一个了。
04:11
啊,只能是写一个啊,就跟古代的话呢,说一个皇帝,你这个可以有多个喜欢的人,后宫佳丽3000,但是呢,只能有一个皇后是吧,都想到皇宫不行,只能有一个啊这样啊下一个说为什么修,然后这次调用语句呢,我必须得第一行第一行出现呢。你可以看到这个规定说我们必须要写在首行啊,你也可以再进一步想说,为什么Java要这样规定呢,我这写了一个这个解释啊,就是说呢,不论哪个构造器,咱们去创建此类对象呢,首先呢,你上来呢,就得先去初始化这个负类啊,目的呢就是当此类形成负类以后,继承父类中的这个所有的属性和方法,此类呢,有必要呢,知道负类是如何对对象呢进行初始化的,就上来呢,就得先明确一下负类是怎么做的,所以我们一上来优先加载负类。
05:08
就是你造个子类对象,一上来先把父类中有的东西先拿过来,那人家父类里边还有父类呢,那你接着再往上走,就这个意思啊,这个哎,这是子类负雷再负类假设就这三层,我们调一个这个子类的构造器,一上来这个构造器的守恒假设就super破了,我们就先去加载它,然后这个呢,构造器的首行也是写的super,那一上来就开始加载它,所以我们加载的顺序呢,其实是先加载的这个类,这首先加载的它,其次加载的是它,然后呢,我们才加载到你自己,就是一个,就跟一个小孩的出生一样,他一出生的话呢,他后边可能有他自己的一些属性或方法,但是他出生出生的这会儿呢,他是先把他父类的那东西呢,先给到他,然后呢,你再看看你自己怎么做的,就这个意思一样,你想想你这个子类,我们说叫重写,你重写的前提是不是先得把父类那个先拿过来,你才覆盖人家呀。
06:08
对,所以说你得先把负类那个先拿到,这也就是说呢,我们必须呢,一上来先去加载负类,那怎么一上来加载负类呢,那就得放在手上。哎,这个意思行,大家呢,这个你可以把这当成这个规定也可以啊,要是我刚才说的这个呢,你能理解了那就更好了,行,这呢是我们说的这个事儿,然后呢,特别需要强调的就是,虽然咱们呢,这个调用了父类的多个构造器,但是呢,自始至终就只有一个对象,那从我们图示上来看,就是这样子的。就这样子的,虽然呢,我们加载了父类这个构造器了,但是呢,我们不认为说你创建了个create,或者创建了一个animal,对外的话呢,是整个这个红框体现为呢,就是一个类型的对象,就是你new的dog啊,这个呢强调过过了下一个概念叫多态性,这个呢确实是个难点,大家呢需要去体会一下,那么这三个特征呢,我们都说完以后,这个今天我们复习完以后呢,再把这个多态性呢,再讲一讲这个,当把这个多态性都讲完以后呢,这个面试题就来了,这个咱们在简历中会写,说熟悉面向对象呢,变成思想,那这时候呢。
07:27
可能会问说面向对象变成思想,你是怎么理解的,或者说呢,这里边先分出来它的一个子问题,那就是说面向对象的三大特征,你是怎么理解和体会的,这呢,这不就涉及到这三个问题吗?这样子的啊,其实这里边呢,你就把每个问题呢独立的说一说,咱们暂时呢先不去整体说这个概念,因为呢,后续呢,还会有一些像抽象类啊,接口啊这样的内容,讲完以后,我们再去谈这个多态性,你会谈的更透彻一些,所以这个问题呢,咱们先只是把这个讲完,真正呢说这三个特征怎么答比较标准更好,整个咱们讲完面向对象,这个算是咱们SSE的基础阶段,以后这个大家呢画一个思维导图,到时候呢,整个呢,也带着大家稍微串一下我们这块内容的时候呢,把这几个重要的问题呢提一下,现在呢,还看不到这个全貌啊,多大性的一个理解就是一个事物的多种形态,可以理解为一个事物的多种形态。
08:27
这叫多态性,多种形态简称多态,就像数组多个数的组合,简称数组。就这样理解何为多态性,就是对象的多态性。多态性就体现为咱们叫对象,对象的这个多态性了,那什么叫对象的多态性,那这呢,就是我们说的这个事儿也考察大家了,行这个呢不多说了,下面呢说这个举例。
09:09
诶把这个CTRLX放到这举例,举例呢也很好说,举例呢,比如我们这生明一个person,那昨天都写过了P,哎,我new一个是一个男人,这个男人呢,是我们person的一个子类了这一个,然后我这呢是一个object类型的,咱们也稍微提了一下这个object类型,我呢可以去你有任何类对象给我用一个date日期的。任何一个类都是我们object类的子类,所以呢,你随便用个对象都是可以满足的,这呢都算是叫多态性。啊,说你给我找个人来,这时呢,他叫来了一个男人,叫来了个女人,都满足我刚才这个要求,这呢都算是这种多态的特性啊,多态的形式,那么具体关于多态性就是这样的一个形式,怎么用啊,开发中就是咱们所说的叫虚拟方法调用。
10:06
那何为虚拟方法调用呢?哎,这不咱们那会儿考的这个事吗。就这样一个点。CTRLS一下是有了这个。上来就勒了,这个有果真是没有啊,见了有就没有了是吧?有了对象的拖带性以后呢,我们在编译期只能调用负类中证明的方法,但是在运行期呢,我们可以执行,我们实际执行呢,是子类充写的方法,这呢就我们叫虚拟方法调用,这大家呢,要要会说,那就总结编译,看左边,右看右边。这个呢,记住它那多态性的使用前提,这个从这个概念来讲就是子分类关系了,从这来看的话呢,涉及到方法的重写。
11:00
嗯,这呢就是它的使用前提,那具体关于多态性的这个举例,举例呢,这不是咱们昨天也这个写了相关的一些这个例子了,就是在这个animal这块,通过这个举例呢,大家去去去去感性上你去接受这个多态性,我们为什么要讲它,它到底呢有什么好处,通过这个呢,你去体会这个,其实我们还可以再写例子,但是到目前为止还不好写了,就是真正呢,你要想再说明这个周代性,就是我们后边要说的这个抽象类和接口啊,如果预习过的同学呢,这个应该你去体会这样一句话,就是如果Java当中没有多态性的话呢,在这个抽象类呢和接口的存在呢,就没有任何意义。啊,因为呢,这个抽象类它是不能够造对象的,这个接口呢也不能造对象,那你面向对象不能造对象了,那意味着你抽象类和接口就废了是吧?那我们开发中怎么用抽样类和接口啊,那我们就一定会提供它的此类的对象,或者说它实现类的对象,那这呢体现为都是多态性,所以说呢,没有多态性,抽象类和接口就没有任何意义,那基本上你这个面向对象这个思想类就塌了一半了,因为我们这个类呢是单机成的,我们希望通过接口呢,实现这种多集成的这种特点,那你现在呢,接口整个就废了,那面向片呢,基本上就塌了一半了,那加上我们这个多态性,咱们目前呢的例子呢,大家体会到的应该都是体现了这种代码呢,算是叫通用性了,就是这个方法的话呢,我们不光适用于你用的是一个animal,我还适用于呢,你用的子类对象。
12:34
啊,那另外一个层面就是我们这写了这么多丰富的方法,一旦呢,你这个行参是一个是一个类类型的,我们如果没有多态性,你这个方法的使用的这种通用性极大的缩小。不能够填此类对象,只能填你自己这个类型的,那就很崩溃了,就意味着我们需要造大量重载的方法,那这个事儿的话呢,不现实,做不到。这个呢,所以我们就说一定得有这个多态性,其实这个多态性呢,还是非常重要的,没有它的话呢,这个我们写代码呢,其实是寸步难行的啊,这个你慢慢去体会这个事儿,那具体要举例子的话呢,那就是咱们这说的这么个事情,那上面这个animal这块稍微大一点,我就光粘它这个核心的这个方法了,你说C一下这个呢,举例一,我就粘粘着一个核心的代码了,然后举例二。
13:32
举例二,这呢,咱们是说的这一个叫method的行参式object类型的,那这也算是一个例子了,就我们在调的时候呢,你可以放任何一个子类对象都是OK的。举例三,这个我们又举了一个说的这个后边我们涉及到数据库连接这个时候呢,一个操作,嗯,这个呢,我这个代码写的不是那么规范啊,因为咱们这个真正要写的话呢,JDBC里边那个细节很多了,这呢只是让大家去体会一下,我们这个连接你可以理解为声明的是一个负类了,具体的话呢,我们可以去你有任何的,呃,My circle的数据库连接,Oracle的数库连接,DB two的,Circle server的等等,拿到这个连接以后,我们下边这个操作的时候,父类呢写一个方法,但是呢,真正执行的不是它,而是呢,你所类重写的这就正好体现了咱们这个叫虚拟方法调用,像后边呢,我们开发当中那用的大量的多肽。
14:27
不可能不用多肽的,这个呢,你去体会这个事儿行,这呢我就也也呢,先把这个呢就都粘过来了,就。就是通过这些例子呢,大家去形象的去体会一下我们所谓的这个多态性它的应用啊没有的话呢,代码寸步难行行,那么在后边呢,我们提到一个多态性使用的注意点,就是我们提到说到底对谁实用,哎就这个事CTRLC好,那实际上呢,咱们上面呢,把这个多态性的核心内容就已经讲完了,就已经讲完了,主要呢,针对于是我们这个方法来讲的,那么后续的话呢,这还有一个七,涉及到叫向上转型与向下转型这个面试题,面试题呢,咱们也这个说过一些了,然后主要呢,就是这个七的内容呢,咱们再补充说明一下,那那整个关于这个多带性的这个内容呢,就算是结束了,这个呢,咱们一会儿过来呢,开始来讲这个点。
我来说两句