00:00
大家好,我是海波老师,我们接下来继续给大家讲我们Java面向对象的语法,那我们这里来拷贝一下。把它改成我们的26,点击OK,点击完成以后,把这个改成26,把里面的东西呢,咱们全给它删掉,然后呢,把这些东西呢,我们也给它删掉就可以了啊,还有下面全都不要。呃,不要了之后呢,我们这里写上它,我们要讲的呢,是一个作用域的问题,所以呢,我们叫作用欲,那么怎么体现这个作用欲呢?我们来给大家写上代码,我们首先写上一个叫做class,我们叫做person a26。好了,然后接下来给他一个子类,咱们叫class,咱们叫U26,然后呢,我们继承我们的PERSON26就可以了,行了,我写完了以后,同学们,我现在呢,给他来写上我们叫public,然后呢我们string,给他来一个name,然后呢,这个name呢,我写上一个我们的李四,接下来呢,我来写上一个public,我们写上一个叫做test。写完了以后,我在里面声明一个name,他等于王五。
01:01
好,同学们有没有发现我在给大家准备的这个属性的时候,它和这个变量的名称保持一致,但是呢,它的属性值和变量值是不一样的,对不对,哎,就是这样行了,那么这样的话,我就想知道,如果我当前访问这个name的话,他访问的是王五呢还是李四呢?所以我在这里呢来写上它。我们写上一个name,诶好了,那我写完了以后,我在这里呢,准备我们创建一个对象,咱们叫U26,然后U,它等于new u26行了,创建完成以后u.test好,那现在呢,我就执行一下这个呀,咱们其实之前是讲过的,对吧,我们说了我们当前的变量呢,它只在当前的作用域当中是有效的,我们讲过吧,而我们的属性它是随着我们当前的对象的作用域而使用的,所以啊,它的作用欲要比它大。那么你的作用欲比它大的话,那么咱们访问的时候是不是会访问到它呢?诶我们来看看我们运行,运行以后看结果,你会发现我们打印的结果应该是多少呀,王五,诶从这就能看出来,如果咱们的属性跟我们的方法的一个变量,咱们称之为叫局部变量,就是说它只在这一块起作用,我们就称之为叫局部变量,那咱们属性名跟局部变量它的名称相同的时候,如果你在访问的时候不加任何的修饰符,它会优先来获取到我们变量的值,诶咱们要说一下。
02:29
如果属性和变量,咱们这个变量要加上什么呢?括号,咱们叫局部变量啊,它的名称相同。那么访问时啊,访问时如果不加我们的修饰啊,不加修饰符,那么咱们优先。啊,访问我们的变量。同学们,这个能够看到结果吧,没有问题,诶老师呀,那照你那么说的话,如果我当前要是没有我的这个变量的话,来给它做掉,做掉以后我再去运行,那这个不用说了,我们肯定访问的是属性对不对,哎,所以这个就访问第四没有问题。
03:07
好,这是第一个咱们要说明的,那么第二个要说明的是,那么现在呢,我们在父类当中,我们也加一个同样的属性来,我们写上name,它等于张三,诶,那么这个时候大家会发现我们的子类有一个属性,我的父类中有一个一模一样的属性,那么这个时候我们访问的是谁呢?那这个呢,其实咱们之前也给大家讲过,我们说过了,当父子类存在相同的属性的时候,我们会默认的执行咱们的子类,咱们讲过吧,所以咱们运行一下运行。运行以后看结果,同学们你会发现当前就是离四,为什么我们说过了,我们当前的U26里面其实是有两个属性的,对吧,一个来自于我父类,我继承过来的,一个是我们自己的吧,没问题,那么好,这个地方它其实省略了咱们的什么this,所以啊,它把这个this关键字它省略了,也就意味着如果你想访问负类的这个name的话,你得把这个this关键字改成什么super,哎,你得这么写,你这么写是没有任何问题的。同学们,我们写上一个this OK,把super和this呢给它区分开,一个叫张三,一个叫李四的运行。
04:15
运行以后看结果,同学们,诶,你会发现没有任何的问题,好了同学们,现在我们关键点就来了,如果我们把这个理四,我要加上一个史static怎么办?我如果加上一个史泰,大家想想,那么我当前的处理当中,我们的访问是什么样子的,对不对,那这个时候我们来运行一下,我们来看看。运行以后看结果,那么这个时候你会发现我们还是张三李四,哦,我明白了,我们当前访问的依然是它,对不对?好,我把这个this呢我去掉。我去掉以后,那么它访问的是谁呀?哎,老师那不还是他吗,对不对,那行,我们运行一下再看结果,那么运行以后你会发现我们的这个地方它还是理四,没错吧,好同学们,我把这个关键字我去掉,我去掉以后我放这里。
05:05
那这个时候同学们想想有没有什么变化呢?你会发现我静态的属性是跟类型相关,但是它的对象是应该能够访问的吧,所以我的super.name应该没有问题。对不对,同学们,哎,所以我们再来运行,运行以后看结果,你会发现它的结果呢,还应该是我们的张三对不对,哎,就是这样,所以也就意味着super关键字,它其实指向的就是我的负类对象,那么我的负类对象想访问它的这个静态属性没有问题。哎,就是这个道理,那好,我们现在呢,把它反过来去考虑什么呢?我这个方法呀,我们现在干嘛呀,给它加一个我们的静态,所以呢,同学们我来写上它,我们叫public,我们叫static,我叫what test,好了,写完了以后干嘛呢?我把这两个都加上我们的什么静态的属性,同学们现在的问题就在于,我如果直接访问的话,他访问的是谁呢?
06:05
我们想想。现在的这个地方,大家想想,我们如果要去访问他的话,我们该怎么去考虑对不对?那么我们这个name同学们,他是李四呢还是张三呢?那我相信大家肯定有自己的判断,对吗?所以咱们直接来运行,咱们看结果运行,运行以后看结果,你就会发现我们当前是不是李四呀,诶老师哦,我明白了,这不跟前面一样吗?默认指向了咱们自己,对不对?哎,就是这样,可是我如果想出现张三怎么办?那老师呀,用super呗,好,你用super。我们用super的话能让你用吗?同学们不能让你用,为什么?因为super是个对象,在静态的方法当中,是不允许访问对象相关的内容的,这个咱们之前给大家讲过吧,因为我们是先有类再有对象,你先有类的话,你的静态的东西就能用,可是你能用的话,你的对象不见得有啊,所以他不允许你出现这种情况,哎呀,那就麻烦了,为什么呢?因为我现在你不加super,我现在访问的就是我们的什么,我们的name对不对?
07:10
啊,就是我当前U26的name呀,可是我就想访问我父类中的这个怎么办?我们这里就要给大家解释一下了,我们所谓的继承,他说的是对象和对象之间的继承,也就意味着我们说super啊,说this啊,都只的是复制对象的关系,但是你当前的这两个属性都跟对象就没关系了,也就失去了继承的意义。所以呢,这个时候就不要去纠结咱们的super和这次问题了,你要想访问他,你还真就得用什么PRO26,所以说你就得这么来写了,大家能不能明白老师说的这个意思,所以我运行一下,这个时候不要纠结那个super了啊,你会发现现在不就没问题了吗?哎,所以有的同学啊,在学完super Dis呀,包括变量啊,包括静态时候,它容易混呐,哎,容易混,这个没有什么好的办法,需要大家下来想一想,把咱们之前讲的那个对象啊类呀,变量啊,他们的关系好好琢磨一下,看看他们谁先谁后,先创建谁后创建谁,对吧,把这个考虑清楚,应该能够明白啊。好了,同学们,我们这个就先讲到这儿。
我来说两句