00:00
来注意看啊,我要变了,各位啊,要变形了,咱们接着往下看,把这个说完啊,中间停的话不太好,TEST05大家看好了,我把T的零五新建出来之后,我把零四的代码复制一下,我贴过来放这。这个叫super test05,然后接下来我在这里跟大家代码没动啊,没动代码各位看好了。我在这个位置加了一个,你先别管private啊,不是讲那个private,主要主要是这啊,看好了,假设子类也也有一个同名属性,死准这个位置有一个什么内。啊,有一个name,那么接下来我这个程序再去运行会出什么问题。
01:03
或者说我这个程序再运行会是什么样的。我们可以把这个内存图搞一下,好吧,把内存图搞一下行不行?注意听课啊,注意听课,假设子类中也有一个同名的属性,这个属性我继承了customer customer当中也有一个name,我这里也有一个name,那么这个时候呢,我调的是这个构造方法是吧?哎,我们把这个图呢看一看啊,这个图啊,我再另存一下各位啊,这个呢,我另存为TEST05了啊,然后我就保存了,保存之后我们来看一看各位啊,这个程序怎么执行的,首先第一个new是不是VIP,把张三传给了谁,是不是他,他是不是传给了super括号,Super括号是不是传给了。这个。对吧,好,那这个name是不是,哎,这个构造方法是不是先执行这个。这个是不是又叫object,所以这边没变,这个name是不是将来还会付给这个name啊,这个name是不是就这个name啊,好,那我问大家是不是这个图object customer张三,Name张三,然后接下来怎么着呢。
02:08
哎,注意看了啊,唯独不一样的一步在什么地方?就是你这个customer,它的name也是等于张三,就这个位置还是这个值没跑啊没问题。那么接下来等我们这个构造方法执行结束之后,是不是就相当于你这行代码执行结束了,第22行代码执行结束之后,大家注意别忘了您这里有一个属性是不是,所以你大括号里边是不是应该有一个代码,什么代码就是this name等于none,这个大家知道吗?这个代因为你这里有个属性啊,这里是实例变量啊,是不是实例变量啊,好,你是实例变量,那么这边你构造方法里边,你调负类的构造方法,你负类构造方法是执行了,但是你这个大括号里边是不是应该会给这个name附上一个none啊。有的说老师他为什么会有这个,你还记不记得,我之前在这有个age的话,你调用这个构造方法,你调这个构造方法无参的话,里面有什么有super括号,然后他会给name附个now,然后呢,它会给这个A附一个零,大家知道吧,我们之前好像说过吧,在一个各个方法里边,如果没有给属性赋值,是不是系统会附默认值啊。
03:18
我们这个也一样啊,VIP调负类的,放super括号调的它呀,他执行之后,接下来这个代码就结束了呀,第24行结束还会继续往下走的,这个大块里边什么也没有的话,他会给这个name,给他自己的这个this.name一个,也就是说这个时候我问大家是不是我们在这个VIP里边也有一个name,这个name是不是等于那个。你好好思考一下。好,就在这儿,是不是有个那有个name。这个name是不是等于now?好,那么接下来我再问大家,这样写还有没有?还一样不一样,还是说出什么问题,还是说怎么着怎么着的。
04:02
各位,这个程序再运行跟上面的程序的结果的区别在哪?各位。这个结果是啥呀?有没有同学给给个给个回应的。不会。两个辩论名一样,不会报错。感觉会重复,注意啊,你this.name指的访问的谁?这个啊,如果你用super点的话,它访问的是这块内存空间。所以你现在的输出结果就变成了什么,那正在什么购物,下面这个是什么?张三正在购物,而这个地方如果你前面啥也不写,它会自动加this点,所以最后这个结果跟第一个结果是一样的,那正在购物。
05:04
所以我们再去编译这个程序,各位啊,Java c这次编译super test05.java然后Java去运行super test05。走好,来看,None正在购物,张三正在购物,Nu正在购物,允许啊,允许同名变量出现,允许同名变量出现啊,Java中允许在子类中啊,出现和父类一样的同名变量,或者叫同名属性,允许啊,允许,那么我问大家刚才上一个例子,它三个一模一样。是因为我此类当中是不是没有去写那个,没有再定一个一样的name。所以我问大家,This点和super点是不是都可以省略?现在我重点考核的是大家,你告诉我什么时候super点不能省?
06:01
这个super点什么时候不能省,就是我们这个例子绕了半天了,就是我想问大家一个问题,就是说注意了this点。和什么和这个叫super点啊,都是就是大部分情况下都是可以省略的。这是第一点对吧,This点什么时候不能省略。哎,就像这种的对吧,哎,这个this点就不能省,那super点什么时候不能省呢?什么时候不能省略。如果负类型当中和子类型当中有同名属性。想在子类对象当中访问父类型的这个特征。
07:00
听清楚啊,我再说一遍。如果。父类和子类当中。有同名属性。啊,有同名属性各位。听清楚啊,如果有同名属性,并且你是希望在子类对象里边。你想访问的是这个name,你不想访问他,你不想访问他,你想访问这个super点必须加上。你的这个张三过来之后传给了他,他呢,Super号又往下传,传给了这个地方的this.name这个name其实就是这个name,这个name和这个name没有关系,是两块不同的内存空间。它这个name在前面加了个super点,你明白吗?他标记了一下,从内存图上其实也可以看出来,如果你是super.name的话,访问是这块内存空间,如果是访问是这个空间。所以super点什么时候不能省略,就是说。
08:02
腹中有,子中又有。如果想在子中。访问什么food特征点不能省略。如果你省掉这个name和this.name一律访问的是它当前对象的这个name。所以这也好理解,是不是啊,也好理解,如果父类和子类有同名属性,并且想要通过子类访问父类属性,则不能省略。有道理,佳慧说的对啊,就像局部和成员一样。This。不能省一样,省略以后就相当于覆盖了是吧。啊,你不能理解成覆盖,我感觉。因为我说了方法,只有方法才有覆盖点数。
09:02
如果你不加的话,它默认访问的就是当前对象的name。明白吗?This点跟不加都是访问的当前对象的。你super呢,Super name,其实说白了就相当于啊这个。Name和我这个name是两块不同的内存空间。其实说白你你这么去理解,就是Java用来区分。Java是怎么?来区分区分什么子类。和父类的同名属性的。就谁啊,This点和什么?这是前对象的什么属性?这是当前对象的副类型特征中的name属性。
10:00
明白吧,就说你怪不得,就大家看见没有,刚才有同学说了,老师这种情况不会出出问题吗。它不会出问题嘛,这有个name完事,这还有一个name,这俩name不就冲了吗?哎,对不起,他俩不是不是不是一样的,因为这个name它前面打了个标记,加了个super点。你明白吧,他在这个name前面打了个标记,叫什么呀?叫this点那这样的话它就可以区分了,你懂什么意思吧。各位理解吗?因为你this.name和name是不一样的,他可以认为是不一样的。大家记住啊,我们在程序里边,如果说你定义了int I等于100,又定一个I等于200,我问大家这个是肯定不允许的,变量的名字不能重名,同样其实在我们Java虚拟机当中,我们的变量名其实也不能重名,这个name和这个name是怎么区分的?它这个name前面加了个super点,这个name加了个this.this点和super点。它是不一样的指向内存空间不同。
11:03
啊。默认是有一个this点的,也就这个地方是有一个this点的,各位啊,你去掉它,它是默认加this点的。默认访问就是当前的name,当前的 namesuper.name其实说吧,你你你你你就是在子类里边,在子类里边明白吗?在子类当中啊,在子类当中如果希望访问的这个name不是这个name,是这个name的话,你super点就必须得加上,这就不能省略了。这是super点不能省略,什么时候不能省略,这个时候不能省略,好,那我问大家问题,我如果在负类当中也有一个方法,这个方法呢,我叫do some,注意听课啊,来我system.out点打印输出,我在这个这个类当中我输出什么呀?this.name对吧?哎。Do STEM,那么接下来我在这呢,加一个什么呀?哎,this.name我去掉this点,然后我再加一个super.name好,我问大家这个程序有问题。
12:03
有没有问题?来,各位告诉我,这个程序有没有问题读萨。有问题吗?有问题,那问题。This name指的是谁?他没负累。哦。他有利啊object呀。类没有name,好,我们编译一下,看出什么问题啊,来Java c编译一下super test05走,点Java走。好了,他说找不到符号。对吧,第28行找不到符号。哪个呀,Name找不到。从super里边找不到name,咱们同学们说的非常对啊,这个第28行编译报错,这就错误了,找不到符号明白吗?这个没有,但这两个可以。啊,这个可以没问题啊,没问题。
13:06
诶,那大家思考一个问题啊,这个作为扩展v.do some能调吗?能调这个方法吗,各位?Do some,结果是啥?算了,这块我先不不说这个了啊,别说乱了,别说乱了,各位啊,先不管了,先不你要感兴趣你就测一下啊,你要感兴趣你就测,不感兴趣就算了啊,现在我只说一个语法,各位啊,就是我super点什么时候能省,什么时候不能省,这个搞清楚了吗?这个咱们放一放啊,放一放,现在先别说先不要搞那个啊,先不要搞那个,就是说现在super点理解了吗。各位。不理解的你可以打个零啊,就是super点什么时候不能省略。这个你得理解一下,你这个理解不了,那这个等于是白讲。
14:04
你就画了半天内存图,其实就是为了说这件事儿。啊,画什么都不好使,就画这个内存图。大概理解了是吧。也就是说你这里有一个name,你这里还有name,我问大家问题啊,如果这里没有name的话,好这几个一样不一样。各位回应我回应我,来来个互动啊,就是这个地方如果没有name,这个地方一样不一样,这样写this name name和name一样不一样。一样没有区别啊,没有去没有任何区别,你怎么写都行,如果说你这一放开妥了,你有一个name,我也有一个name,我现在在我此类当中,我想访问的不是这个name,我想访问你父亲这个里边的这个name,那你这个点就不能省。就不能少,就是同名的属性出现了。
15:03
同名属性出现了。嗯。好了各位,那这个呢,我就说到这儿啊,说到这儿好,咱们先休息个十分钟吧。
我来说两句