00:00
好,那接下来呢,我们看这个叫子类对象实例化的过程,刚才说了有一句话想说没有说,就是实际上要一说就说成它了,那我们这块来看一下这想描述什么问题。嗯,大家看这样个图,我呢在这个内存当中,我造了一个dog,这个dog的话呢,它有几个副类,直接副类呢叫animal animal的父类呢叫creature creature的话呢,默认又继承于object,对,那么就会有这样的几个类啊,首先的话呢,咱们从这个继承的这个内容上来讲说呢,我们去创建一个dog的对象。咱们讲完集成以后说我创建一个道对象,那么在负类当中,如果它都定义过一些属性的话呢,我们逆完的这个对象里边,在堆空间这个结构上来看,它就都会加载他们这些副类中的这些属性了,这个是咱们已经说过的。啊,那么咱们把这个呢,就称为叫继承性,就是说你继承完以后呢,此类就可以用互类中的这个结构了,或者叫拥有了这个结构了。
01:05
这是咱们从那个叫结果上来看的啊,我把这个事儿呢,咱们描述一下。这个描述的话呢,我还写到这里边儿吧。这让我再去建一个class,这个我就叫叫instance。A。通过这个呢,咱们来说明一下,叫此类对象实例化的全过程。其实这个事儿的话呢,不给大家讲也没事,但是讲了以后呢,你会更透彻一些。首先我们从这个叫结果上来看。结果呢,结果上来看,就刚才那个dog一样说呢,我们创建一个子类的对象,哎,或者我不创建对象也行哈,咱们就说这个结果吧,就是当我们子类呢,继承父类以后,那么此类呢,就获取了父类当中声明的这些属性和方法,那么反馈到咱们代码上呢,就是当我们去拗了一个子类对象的时候呢,我们这个子类对象在这个堆空间当中,它就加载了父类中的这些结构了,我们就可以直接掉了。
02:17
啊,就是这个问题,把这个写一下,从结果上来看呢,就是子类继承父类以后,就获取了父类中声明的属性或方法。啊,这个呢,其实就咱们所说的这个叫继承性,那也就是说呢,子类对象实例化的全过程,从这个结果上来看呢,就是这个继承的特点,我就获取了傅雷中生命的属性和方法,那么这个创建。子类的这个对象啊,在这个堆空间中。哎,就会加载这个所有负类中声明的这个属性,哎,这呢叫所有负类,因为你涉及到直接负类啊,间接负类啊等等,哎,这是我们说从这个结果上来看呢,大家可以看到在堆空间当中呢,我们像这个name和负的,我是在animal中定义的,我这个age呢,是在creature当中定义的,哎,我就有这样的一个结构了。
03:24
呃,这几个类的话呢,我暂时就先不创建了啊,其实也比较清楚,就是这是一个子类了,然后里边呢,我定义了一个叫host name,就是它主人的名字,然后那个animal里边呢,我定义过name和副的两个属性,Creature呢定义过age属性。那就是这样的情况啊,好,这是我们从这个叫结果上来看,然后接下来呢,我们从过程上来看。从过程上来看,什么意思呢?我们现在呢,创建一个子类的对象。创建一个子类对象呢,咱们是通过子类的构造器创建的。
04:03
那这时候我这样说,大家看能不能理解啊,说呢,我们通过子类的构造器创建子类的对象,那么子类的构造器中。我说呀,就会直接或间接的调用到负类的构造器。然后这个负类的构造器呢,又会直接或间接的调用它上面的构造器,一直到object的这个构造器当中。这个呢,感觉一下子有点接受不了,看一下这个图,看下这个图,我这呢,这是这样的几个类了啊关系大家一目了然,我这个dog当中,比如说我每一个这个小框呢,就是都代表着是一个构造器,然后animal上creature object就一个行,看咱们那会呢,说过说一个类呢有N个构造器,说呢你最多有N减一个,写这次没写那个一定是super了,这个刚才已经咱们都公认了,对吧,那我说呀,说我们去new一个dog的对象,我一定会直接或间接的调用到animal的构造器,然后animal呢也同样的道理,会直接或间接的调用到的构造器,Creature呢也一样,一定会直接或间接的调用到object的构造器,你看看。
05:24
这个事为什么你看这个仨是吧,那个仨,嗯,假设呢,就是这种关系啊,这个呢,掉这次掉他了,他这次又掉它了,它一定是秋了。那你这仨过道题,你随便挑一个,你要挑这个,这不就是间接的掉负类了吗?它也是一样,你要挑它呢,就直接掉负类了,不会有例外的。你你随便你说我我再补俩再补俩,你要么呢是直接掉,否则的话你就掉它,你要掉他呢,他要么直接掉,要么他就掉,别掉他重载的,别的他掉重奶的,你看我这我掉谁。
06:00
你钓谁是不是都得反过来吊他呀?哎,这个事儿呢,大家得清楚。也就是说咱们为什么说说我这个dog,我用了个dog说堆空间当中你凭啥就有C有animal的这些属性啊,凭啥有啊,就是因为咱们在造这个子类对象的时候呢,咱们直接或间接的你调用了父类中的这些构造器了。你一定负类的构造器,那负类构造器在负类当中,我是不是这时候就得把负类中的这个结果给你加载过来啊。哎,因为我加载到内存中了,所以说呢,你才能够体现为一种继承性,说你能够掉了,就是因为我加载过。是这样的原因。啊,你看这个呢,Animal也一样的道理,这个你只要到这儿以后,你不管你怎么调,它一定会直接或间接的又去调creature的波,到7CREATURE呢也是一样,不管你这个建筑你想怎么画,它也一定会调用到object这个构造器,那到object这一块呢,像object当中,人家定义的很多方法,像to string啊等等等等就加载了,加载以后呢,我们do的这个对象呢,你才可以去用。
07:05
就是因为它加载过啊,这样的原因造成的。行,我们把这个事呢写一写,说从过程上来看,说当我们通过子类的构造器哎,创建子类对象时。其实这时候这个子类呢,你就很通用了,除了object,那其他的每一个类你都可以看成是子类了,因为最起码你也是object的一个子类了啊,说白了就是咱们创建这个对象的时候都会有这样的情况啊,当我们通过子类的构造器创建子类对象时,说我们一定会直接或间接的调用这个其负类的构造器啊,然后呢,这个进而调用负类的负类的构造器,这样然后呢,点点点点说,直到。
08:06
直到呢。调用了这个Java点。第二看浪下这个object这个类中这个空参的构造器。为止。正因为我们加载过所有的父类的构造器,所以呢,我们才会将这些父类中的这个属性啊,包括方法呀,加载到内存当中,所以你这个子类的对象才可以用啊,正因为这个加载过这个啊,这个所有的这个父类中的加载过所有父类中副类的这个结构啊啊,所以才会。或者叫才可以。看到内存中啊,这个有父类中的结构。然后呢,子类对象啊,才可以考虑调用。
09:02
就是你要没有,那肯定掉不了,那为什么有,就是因为你这些负类一个不少的全被加载过啊,就是这样个原因,这就我们所说的这个叫过程啊,你要从结果上来看呢,大家可能就只需要记这个事儿就行,说呢因为有继承性了,所以我们说了,只要有继承,所以子类呢,就全部能够能够获取到复类中这个结构,这是从结果上来看,为什么能获取到这个结构呢?就是因为你加载过,为什么加载过,因为你直接或间接的一定掉过这个构造器。啊,这就是这样个原因,那这个呢,事儿咱们就算说完了,但是这里边儿需要大家强调一点,或者要明确一个事儿,明确一个事儿就是虽然咱们呢,在这个内存当中啊,咱们加载过animal的构造器,加载过creature的构造器,乃至于object构造器,但是。这个时候你要确定我们这时候内存中到底遭过几个对象。觉得不肯定了,不能说造过四个对象,对,就造过一个对象,这个对象呢,就是你new的这个子类的,这个构造器的这个类型的,只是说呢,我们调用父类的构造器,可没说我去new啊,你要new一个animal,那肯定是造了个对象,我这没new animal,我只是掉这个构造器了,没有new这个事儿,没有new那就不能说造了一个animal啊,这个大家要注意,这呢我们明确一下就是这个。
10:29
创建子类这个对象的过程当中,或者叫这个,虽然这样说调用了,虽然创建子类对象时。叫调用了。这个负类的构造器啊,但是这个自始至终就只创建过一个对象。就创建过一个对象。啊,即为就是你new的这个子类对象。
11:07
哎,这个呢,确实有同学问过这个事儿,说是不是我这时候就造了多个对象啊,那真没有,你想你要造多象,那不就乱了吗?我这就只有一个名,那咋就成了多个对象了呢?哎,就是我们看我我这写的时候呢,我外边还明显加了一个黄色的一个框嘛,就是你调的这个结构呢,都只是把这个相应的属性加载过来了,它还没有没有一个就我对外的不暴露他的一个具体地址,这些具体地址都不对外暴露啊,你要都对外暴露,那成了好像说这个这个具体这是一个对象似的。但这块地址都不对外暴露,我对外呢,只暴露这一个地址,那就意味着就只是我们的道的这一个对象。这个大家要清楚。好,那咱们就把这个过程呢,就给大家解释清楚了,其实这个呃子类对象实例化这个过程的话呢,大家其实能理解呢,是最好你就不理解的话呢,其实也不影响你写代码,因为呢,继承性你清楚,继承性清楚你知道爱国此类呢,这个继承以后我就都能用这些东西了啊,我们这个事呢,只是想说明的就是为什么能够用啊,其实就相当于说的这个问题。
12:09
啊,大家下来呢,再去体会体会。
我来说两句