00:00
好,打开我们的幻灯片,我们来看一下撕开了复写字段的一个快速入门,我们二话不说,我们先来上一个案例。看大家理解一下这个值是什么样子的啊,首先呢,这有一个A,这有一个BB,里边我override了一个HG,在Java,在SC里面要去复写一个字段。或者说你有一个子类的字段跟他一模一样,你必须写O,否则报错。好,我先把这段代码呢给同学们板书到这里来,我们来一起写一下。现在代码叫SC的,SC的什么呢?呃,这个字段的一个override field。啊,或者叫属性的这个都可以啊,Over。Override OK,现在呢?我们快速的来走一个小案例。找一个主函数好写到这里来。那现在呢,我们再写一个叫做B的。B。好,同学们可以看到,那现在注意看这里啊,同学们看呃。
01:03
这个地方。这个地方的代码我看看是哪里写错了啊,把它改成这个R吧。N。啊,改成R,这A指它。呃。哪里写错了,他这儿。他说变是不是又是这个类名,又又是类名的原因啊,是不是又是类名的原因啊,同学们,应该是类名的原因,我刚才是两个A,现在我升下级变3A了。下面就变4A。好,这样就没毛病了啊好,现在呢,我们来整整整一段代码。我们创建什么呢?同学们看啊,我现在去创建两个对象,实例两个B,一个是指向A。B的实力都是B是一个是交给A,一个交给B,我们看看这个时候他会怎么样。
02:03
VR objects,我故意把这个类型写清楚。好,咱六一个BBD,好这边要写成三个A。好,然后呢,这边就OK了。紧接着呢,我VR。二。然后呢,类型BBD,我就直接指定是BBD。好比。好,现在我写完了,写完过后我现在要输出这两个词,我说object。这写个1R减1.h看清楚了啊。H等于加上加上我们的这个,呃,OBG1的H,再加上一个ob2.h等于再加一个ob2.h。好,此时此刻呢,呃,我们可以给他来一个这个治疗,我们来看结果是什么。
03:03
啊,同学们,你们感觉结果是什么呢?好,同学们可以看到啊,我们一运行过后呢,我们发现两个都为20运行一下。两个都为20。同学们可以看到这个时候呢,它运行的结果是两个都都为20,而不是我们想的那样是一个为十,一个20。好,那么为什么会这样子呢?其实同学们应该很清晰的知道,就是因为这里,在这里面会生成它会生成一个public的。Public的age这个方法。对的没问题,那么这个地方呢,它也会生成会生成。它也会生成一个public a方法,那这样子就说我们这个方法去覆盖了它,也就是说其实你看起来好像是字段的复写,其实它的本质是方法的复写。
04:02
对,就说你看啊,在这里我们刚才讲过JVMG的一个动态绑定机制,因为你在这看起来好像是访问属性,它的本质这个地方,其实这个地方是obj,它调用了,它调用了OBJ1里面的H这个方法。好,当然你下面这个OBJ2呢,它调用的也是这个,这个时候它访它它看起来啊,好像是访问OBG2点这个H的确是这样子的,但是。但是因为你这个OB结这个这个啊,上面这个啊,他看。上面这个是这样子的,你虽然OB减一是一个负类的引用。这个是没问题的,互利用,但是呢,因为我们这有动态绑定机制。动它有动态绑定机制嘛,它一旦有动态绑定机制的话,其实你这个OB结一虽然是负类的引用,但是因为你指向的那个内存地址是一个BB的,所以它其实调用的是BB里面的这个edge。
05:09
说在就直接返回20了,它直接返回20了,同样这个地方就更好理解了,这个你你这个OB2本身就是bbb的实例,那它也是直接访问这个bbb里面的age,所以说这样就OK了。好,所以说你看这就是。你就如果你这样访问的话,你没有做任何任何这个控制,那么真的就相当于我们这个age把它给。复习,因为从从这个基本的原则来看,你就是访问不到它。啊,就说如果你没做任何处理的话,你就是访问不到它。但是有没有办法说,老师,那我就是想访问这个父类的age呢?你可不可以访问呢?当然也可以访问,那你就那你就自己写一个方法,单独写一个方法,让他继承下来去访问,这个是不是也是可以的。啊,但是从默认来说,你这个O的的的确确就把它干掉了,那你只能是独立的写一份,独立的写一份代码。
06:08
啊,独立的写份代码,好这个呢,我们就说到这啊,这就是我们所说的这么一个动态绑定一致,那么我们把这个代码拿出来看一下,对应的源代码,对应的这个底层代码,我们来看一下就OK了,来跑一个打开它,然后呢,我们打开这个ma里面的AA。好一个是A。同学们看,这是AA,还有一个bbb。看这里A里面有个age方法,然后bbb里面呢,你看这也有一个age,我把你给相当于是复习了,那么我在调的时候,其实一直调的是它,那就直接把这个二次返回好,到此为止啊,这就是我们字段的一个复写流程。那现在呢,我把这个代码给大家整理一下啊,待会再说一下其他东西,好,这是撕开了复写字段的一个快速入门案例。来走一个啊,那这边呢,就应该是一个小的箭头。
07:04
诶,就是这个小的箭头放到这儿,那么我把代码给大家拿过来。诶,把这个代码拿过来,代码来过来过后呢,我们把编译过后的那种代码拿过来,这边有个细细节啊,就是动态绑定机制生效了。哎,动态绑定机制生效了,然后呢,这边反编译后的代码看一下啊。反编译后的这个代码体现出这个特点,你比如说刚才我们看到的这一个。A。AA。你看这个AA在这里。Iaa在这里。那么bbb呢?把这个age给覆盖了。把它找到这bbb啊bbb OK,看这继承了它。好,同学们。这个它的编译过后的原因咱们也一目了然了啊好。
08:01
呃,那么关于这个复写字段呢,我们就啊复写字段我们基本的快速入门,我们就说到这儿,截取一段视频。
我来说两句