00:00
大家好,我是海波老师,接下来我们继续来讲Java语法中的继承,我们这里呢,拷贝代码来,然后把它改成我们下划线,我们的一,然后呢,复制一下,点击OK,点击完成以后把这个名称改一下,然后把里面的东西呢,咱们都去掉,去掉以后呢,我把这些呢,我们先去掉,咱们一会儿再写啊好了,我写完了以后呢,现在干嘛呢?我们准备啊,给大家演示一下,我们还是创建一个叫class,我们还是叫parent,给个一,然后呢,我写个大括号,声明一个属性name,它等于张三,好了,然后呢,我再写上一个子类,叫做class,叫child,然后呢去继承我们的parent,但是我这里呢,我需要给他写个CHILD1,然后呢,这边写上一个咱们叫PARENT1就可以了。大家还记得吧,我们的继承关键字呢,就会让我们的这个属性被我们的child的一给我继承过来,说白了就是原封不动给他拿过来,对吧?哎,就是这个意思,你拿过来以后,就意味着我们在访问的时候,我的CHILD1,我们这里写上C,它等于new child1,然后呢,写上c.name没问题,我打印一下也都没有问题,好了,我现在运行,运行以后看结果你会发现我们这个是正确的,对不对?好了,没有任何的问题,对吧?但是呢,我不想要依托于我的父辈,我想要自己奋斗,砥砺前行。
01:17
我在我自己的类中也生明一个name属性,我不想用它的,我自己写一个,诶把它改成李四,对吧,我这么来写,我这么写完了以后,如果你成功了,那你觉得你的成功在其他人眼里是因为你的努力呢,还是父辈的福责呢?当然了,你不在乎周围人的眼光,但是我们在乎呀,我这里打印内部的值,你想想我现在打印的是张三呢还是李四呢?大家想一想,那你说了,哎,这不肯定是李四吗?但是你要注意。咱们的name属性也被我们继承过来了,我自己又有一个name属性,那不就意味着我当前的类中有两个一模一样的属性了吗?你怎么能确定打印的值一定是我们的李四呢,对不对?哎,当然了,你这里可能会说了,老师,我们的对象中怎么可能会有两个一模一样的name属性呢?来,我们看一下,我们把这个去掉,我们写上它叫做点name,诶,大家有没有发现确实是一个呀,我这个地方并不是两个,对吗?诶,好了,你这么看你看不出来,但是呢,我们这么看呢,来,同学们,我写上一个word,我写个test,然后呢,我写上一个name。
02:20
同学们有没有发现我们这个地方确实是有两个,一个就是我的它,一个就是它确实有两个,那么既然有两个的话,我在这儿可能区分不出来,那我在这个地方能不能区分出来呢?所以我写上它叫做name。对不对,我有两个name呀,好把这个给它注掉,注掉以后呢,我写上C点我的test,诶现在打印的是张三还是李四呢,你刚才啊,就因为你只能看见一个,所以我们的结果呢,就是李四呢,但是现在你能看见两个呀,那该怎么办呢?对不对?所以啊,我们现在就来运行一下,你会发现我们当前的结果它还是我们的理四廖老师,那就不对了呀,你都看见了两个的话,那我怎么把两个区分开呢?难道我再写一遍吗?
03:04
你再写一遍的话,你运行你会发现两个李四呀,诶老师那不就意味着我的张三不就没了吗?我告诉你张三还在,只是呢,你用这种直接的方式,你打印不出来,什么原因呢?我们一会儿再说,现在呢,我们想区分他们两个的话,我告诉大家有办法,我们Java中使用两个关键字来区分我们当前的属性,所以我们这里呢,给大家解释一下。如果我的父类和我的子类它含有相同的属性,那么可以采用特殊的关键字进行区分。什么关键字呢?给大家解释一下,一个叫做super,一个就叫this。就是这两个关键字就能区分我们当前的两个属性,什么叫super,叫上一级,这个this呢,就是当前,大家可以看到我们当前CHILD1这个类里面不有个属性吗?这个属性就属于CHILD1对象的吗?所以就是当前的,所以我写上一个叫this,对吧,你这么写,你写完了以后,这个name呢,我说了,它来自于我们的上一级,就是我的负类,所以呢,我写上一个叫super,你这么写就可以了,我们写完了以后,我们现在来运行一下看结果,看结果以后你就会发现我们的张三和李四就已经区分开了,所以啊,张三其实还在,只是用之前的方式我们访问不了,我们现在就可以访问了,诶老师,那为什么之间访不了呢?很简单,因为我们默认情况下,这个this关键字你是不用写的,什么意思啊,大家还记得我们之前是不是有一个叫做我们的name呀,如果我什么都不写的话,我们Java虚拟机会默认调用this.name所以说你不写是完全可以的,当然你写上也没有任何的问题。这个呢,需要大家。
04:45
能够明白,不过有一个地方需要注意啊,因为这两个关键字啊,都表述的是对象,所以呢,它在静态方法和静态代码块中,这两个关键字是不能使用的啊。好了,我们这两个关键字就先说到这里。
我来说两句