00:00
好,看一下我们这个equals呢,这个课后练习题,这呢涉及到两个代码题,这两个代码题的话呢,还都是需要我们自己呢去手动的去定义一下,这个以后的方法就是手动的去写一写,大家呢也稍微的去练一练,等到后边开发的时候呢,我们就不再去手写了,就啊首先呢,第一道题说编写一个order类,里边呢定义了相关的属性,希望呢我们去重写这些eo方法,比较两个对象呢是否相等啊,它没有明确说,那怎么算叫相等啊,这就不用说了,咱们默认的话呢,只要让你去重启了,比的都是内容,就是这个意思,好,我们把这个呢CTRLC这呢,我们再新建一个。二。这我就直接就order,就我们需要写的是这个order,不妨呢,我把这里啊就写到一起了,把这order呢,我就写到这个下面了。行,CTRLV一下。
01:04
好,那么order呢,它这提到有int型的order ID,咱们呢就考虑的完整一点,这个属性呢也都私有化了,Int型的叫order ID private词之类型的order name,接着呢,相应的盖塞方法,Al shift s,这个我们添加一下盖塞方法,然后构造器呢,说提到有一个两个参数的构造器,Al shift s加构造器默认呢选中了OK。接着需要去重写这个EQ方法,那我们这块呢,就直接dqqu out斜杠,诶做一个重写,重写的话呢,不用再去告诉你说重写的怎么叫出了,我们呢,直接呢,就在这块呢去手写就完了,比的呢就是它的实际内容,这里边的话呢,没有特别说说只按照ID比,或者只按照谁比,那就是通常情况下两个都比,其实这个写法的话呢,你会发现跟咱们刚才写的custom当中呢,基本上是一样的。
02:03
无外乎就是换了个皮,这是个order,那是一个customer一样,对其他呢,其实都一样,我们呢,也可以首先呢判断一下这次和我们这个obj他俩的这个地址是不是相同,相同呢,直接就return出了。啊,直接认出这呢,也不用写else了,直接就下边,相当于就是L4能走到下边,说明你俩地址不一样,然后呢,我们判断一下你这个obj是否叫incense of叫order,看看你是不是一个order,如果你要是个order呢,咱们就比,不是order的话呢,直接就false行,你是一个order是一个order呢,咱们先把你呢做一个强转。先把你转下来,不必接,那我们转的目的呢?转的目的是啥呀?转的目的就是我们要是不转的话呢,我们通过这个OB接你是不是点不出来,你你本身是个order哈,然后呢,你要不转的话呢,Order里边那些属性你是不是点不了啊对,所以咱们必须要给他点,这也是咱们上午讲多态性的时候,向下转型的目的呢,就是咱们想调一下你真实这个对象的那些特有的属性或者方法,不转就掉不了了,所以我们就做了一个向下转型,那转移完以后呢,我们这时候呢,就比较一下,所以转完以后就直接这return了啊,看看当前这个对象的all ID。
03:25
这是int型的了,所以只能用等等,就判断一下你俩数值是不是相同就行,跟我们这个行参的这个对象的奥ID是不一样,这个一样,并且还得要求当前这个对象呢,叫order name。这是一个string类型的了,诶我们得比较他们的equals是不是跟我们这个行参的这个order的这个order name呢是相同的,诶这样子就可以了。这要比较长的话,你可以在这再再换上行这样行这呢就咱们这个重写的这个eo的方法,咱们写的这个呢,说实话还是比较简陋的,大家呢,一会练的时候呢,你想一想跟我们自动生成的这个呢,差别在哪?我们这个漏洞是什么,看看你能不能找到一个,明天咱们复习的时候呢,说这个漏洞啊,那基于这样漏洞,我们开发当中其实都是咱们这个掉现成的了啊,当然呢,大家也现在先练一练基本的能够写一个啊,那写完以后我们这个呢,就这样了,接下来咱们在这呢做一个测试,我写一个main方法,造两个对象。
04:33
Alt斜杠这个叫1001,这个呢,我们起一个叫AA。写完了下边呢,我们再去造一个,这个叫ORDER2,这个我叫个BB,显然呢,这两个呢是不一样的,我们测试一下一点EQUALS2。诶,这个呢是个false,这是显然的问题,然后呢,我们再接着我再造一个。
05:04
这呢叫ORDER3。这个呢,我那也叫BB吧。现在呢,我这个ORDER2,我去跟这个ORDER3呢,去ES一下。这个怎么着?二跟三出还是FALSE3处呗,重写的目的不就是为了希望它是出吗?就当这两个对象的这个嗯属性都是相等的时候,我们这时候呢,让他返回来就是一个处了啊行,那可能有的同学在写的时候呢,一不小心呢,把这个equals呢给写错了,写成谁了呢?写成等等了。写成这样了,大家看看行不行,这呢我写成等等叫这个order.order ID,然后呢,并且。说这点,All the name。等等了,说点叫写成这样了,写成这样了是吧,这呢相当于是不是开始比地址了,对,开始比地址了,那我现在这个是true还是false啊,很多同学都说是false,个别的同学说是true,这个时候呢,真理掌握在少数人手里了。
06:25
嗯,你看还是个处所,哎,这这也是true,首先呢解决一个问题,就是说为什么这时候是处,先说清楚,对,这时候呢,咱们那时候呢,隐约的前面讲过这个事儿,但是没有细给大家去说哈,就是咱们这时候呢,就是看上边我这呢,直接就把这个a ABB就写这了,其实这两个呢,主要原因是因为有这样的一个实际问题存在啊,我这写个S1,我这写个BB,我这呢死针形的,我写个S2,直接写个BB,你说这两个我要用等等判断是什么呀,这是不是true啊,对,正因为你这个是true,所以咱们这个结果,这不是才导致true的吗?
07:03
我这边就是这样写的,一个BB相当于这个一,这两不就相当于S2吗?这两个比的时候呢,咱里边不是就用的这个等等吗。完了说懵了,嗯,也不能当我没写过啊,因为我还没说完这事呢,说完以后呢,你还不懂,你就知道下边用eo就完了啊,我先把这个事儿先说清楚,这个为什么是等等呢?就是因为我们这个string呢,它特别之处就是它的内容呢,存在常量池当中,咱们当时讲内存解析呢,解析时候呢,稍微给大家提过一下哈,就是我这呢是一个S1,这是这个S2,这是咱们这个对它这个内容不在这儿,它在这个常量池里边,方法区呢,方法区里边呢,这有一个BB了,这是我们这个S1呢指向它了,那么S2的话呢,为什么它俩等等说是个处呢,是因为常量池它有个特点,就是你要是再定义了一个变量了,发现跟已有的这个相同了,它就直接就复用了。
08:00
那就意味着他俩付过来的地址是一样的,所以我们用等等判断了这俩就是个处,那这个事儿的话呢,要听不太明白呢,这我就快速的过了,大家呢,就当没这回事儿先啊这个我们现在的话呢,你发现用等等这也是对的,就是因为呢,咱们上边这个写的时候呢,是这样写的,但是咱们要求大家关于string不能用等等,为什么呢?因为我有可能不是这样的方式呢,去new的,如果我这样去new,就是附我们这个order name啊,我这样写的,这样写的话呢,你就有问题了。你看我们这是这样写,你下边这个改不改都可以CTRLS一下,我们再来看一下这个事儿。你看此时是不是就是个false了,就是我们这时候通过new的方式来造的时候呢,地址跟这个就不一样了。那那有可能我们去提供这个order name属性的时候,我就是new的,我不是这样的方式写的,所以你得准备好,然后我们造对象的时候呢,不一定非得是这样写的,那要这样写的话呢,你这个等等就不好使了,所以归结一句话就是不要这样去写,这是错误的。
09:03
大家呢,你要是现在听不清楚呢,咱们后边讲string的时候呢,你就懂了,现在你就记住这个结论,这样写是对的,这样写是错误的。为什么呢?因为你这个等等比的是地址,咱们现在需要比的就是你的内容是不是都相等,所以呢,用该用ES的时候还得要用ES。也就是说只要呢,咱们比,咱们比较这些属性当中。总结这个结论,只要咱们比较的这个属性当中,你是基本数据就行,那你就用等等,只要你涉及到引用数据就行了,都要用ES。都要用equals,那问一下你说假设咱们这个order啊,假设这个order里边呢,我又定义了一个属性叫private,举个例子,比如说就咱们就是cost类型了,我写个cost,这呢,是不是也是作为咱们这个类的一个属性出现了假设那那里边能够拿过来用啊,那你说它做一个属性出来,我想属性出现我想比较两个order是不是ES咱们要重写,那就是三个属性是不是都得比啊,都得比的话呢,那在这个位置是不是就得再与上一个说这个要求CUSTOMER2个之间也得掉那个点E3,那你想想我们这里边的比较这个customer的时候,Customer这个ES用不用我们去重写啊。
10:24
用不用也得用啊,你要不用不是你也成等等了吗?你不充写,你不充写用,那不就成了object当中当对吧,所以也要重写,说白了就是这是一个对象,这是一个对象,这两个对象呢,我们想判断是不是ES每一个属性,如果我们默认情况下,就是每个属性都得去比,都得比的时候呢,基本数据类型用等等,已用数据类型用ES,这个ecos也得要求你得是重写以后的ecos,你要是用string的话呢,人家重写过了,不用你管了,这个包装类呢也重写过了,也不用你管了,你要这里边呢,又出现了一个自定义的一个类型的属性,那是不是你把你自定义的这个也得再重新重写一下呀。
11:11
哎,只能是这样啊,只能是这样啊,把这个事儿的话呢,我们强调一下。行,这个呢就过了啊,上面这个呢,咱们也看不着,就把它删掉了。哎,把刚才这个事儿的话呢,大家得庆祝一下,你要说从开发的角度来讲呢,到时候呢,咱们不是说也用不着咱们自己去重启了吗?你直接在这块呢,自动生成一下,涉及到里边有一个自定义的一个custom类型啊,Custom里边也自动生成一下完事。啊,就考这就可以了啊。行,这呢是咱们说的这个练习的第一道问题。
我来说两句