00:00
来,这个方法我说一下,我再强调一下是这样的啊,大家必须得了解这个ES方法设计的初衷,它的初衷是为了比较两个对象是否相等的,但是object这个类当中,Equals方法它比较两个对象是否相等时用的是双等号,我们在这里已经测过了,用双等号是不能判断两个对象是否相等的,因为T1这块是008年8月8日,T2也是08年八,按说T1和T2表示的是同一个日期。对吧,同一个日期这两个对象可以理解成是相等的两个对象,对不对?哎,但是我们在这里发现t1.1cos t2的时候,这个结果是false。这个结果是false,看见没有重写equals方法之前是false,那我现在假如说我重写object这个equals方法之后。我比较的是内容,这个位置比较的是什么,比较的是对象内存地址,那么这块我假如说要重写的话。
01:10
我这个结果会是怎样的?T1表示的对象是2008年8月8日,T2表示2008年八日日期一样,那我问你是不是最后结果应该是true才对呀?对吧,是不是啊啊,你想这个代码该怎么写。我说当年相同,月相同,并且日相同的时候,比方说两个日期相同,两个对象相同。你知道代码怎么写?各位想想。或许谁?获取第一个日期的什么年月日吧。对吧,然后再获取什么第二个日期的什么年月日吧。然后开始比对吧,是不是开始比对呀。同学们有没有在听课?有没有在听这个equals,我要重写了啊。
02:02
我要去重写equals了,我这个equals方法是判断啥的。哎,我同学们为什么要重写啊?这块有很多同学可能听不太懂了啊。我为什么要出现E3?为什么重新重写equals?为什么为什么不直接调类的类的equals方法?为啥不调object类类的equals?为什么我要子类在这要再重写这个方法呀?对,因为object里面的equals方法用的是双等号,判断的是两个对象的内存地址,而我们比较两个对象的时候,我们一般都是比较内容,对吧。是不是一般都是比较内容啊。所以这个equals显然是不够用的,所以我们此类在这个位置是不是就需要去重写equals方法呀?那关键是E的方案怎么重写,我说了这个由你来定,你认为两个日期,你你认为两个对象什么相同的时候,表示两个两个对象相同对吧,就是你这个equals应该怎么重写,就就很多很多同学啊,就有一个疑问,这个S到底应该怎么重写。
03:12
你自己定。明白吧,你认为两个对象什么相等的时候表示相等,你就怎么重写啊,你就怎么重写就行了,各位啊。就是你这个方法到底应该怎么重写,那要看你具体的业务,比如说你这个这个这个连有一个person这个类。对吧,有个person类,那你现在拗出两个person来,你认为这两个person,这两个人是否相等,你通过什么来判断呀,比如说person里边可能有一个属性叫什么呀,诶叫做身份证号。
04:00
对吧,那这样的话比较两个人是否相等的话,你是不是可以通过身份证号比较啊,如果身份证号一样的话,表示同一个人呗。就那你重写ES的时候,你就比较身份证号就行了。是不是哎,身份证号行各位啊,注意听课啊,注意听课ES啊,那么这块呢,我获取第一个日期的年月日,第二第二个日期的年月日,然后开始比对第一个日期是谁,我问你。是不是T1去调你这个方法,这里边是不是有个this。是不是就是T1。对不对啊。哎,This year。是不一二一啊,This month。是不是MONTH1DAY?哎,是不是对一呀,好,我问你第一个年月日是不是就取到了。第二个年月日,我问你是不是调这个方法的时候,T2是不是传进来了,T1去调ES方法是不是把T二传进来了?
05:03
T2,这是一个对象吗?是不是传给了我们的OBJ啊?好,我问大家在这儿能不能OBj.e。能不能这样做页二?二。对二。能不能这么干不行,知道为什么吗?因为OBJ是object object里边没有这个,没有这个,也没有这个,明白吗?编译一下,大家看。Java c t02.java。好,大家看说谁呢,说你obj里边年和月和日都没有。八十八八十九和90都不行。他从类型object这个变量里面去找这个day找不到。
06:03
找不到符号,所以我问大家,如果想访问此类型中特有的东西,需要干什么?需要干什么。各位。哎呀,现在先不用管to斯顿这个那个的啊,不是那个事儿啊,不是那个事儿啊,没到那个节骨眼上,咱们后边再说啊。现在在这个位置,是不是把我们第一个日期的这个年月日是不是取出来了。调用equals t二传进去,你T2这边是不是也应该有一个年月日啊,那这个T2付给OB的,OB去点year.month.day。点不了,因为你OB这是OB类型,没有这样的属性,这样的属性,这样的属性都没有啊。是不是哎都没有,所以说有他说老师那还不简单吗?我把这改一下,改成什么呀,改成这个叫这个个这个这个这个什么这个。嗯,My time。
07:03
各位还记不记得方法覆盖的时候?有一个什么要求。方法覆盖的时候有个什么要求?返回类型怎么着?一样方法名,一样形式,参数列表是不是也得一样?你老祖宗里边长这个德行。你在这里重写的时候,也必须得这样写。明白吗?啊,你写成my time不行。编译一下。同学们,这个为什么通过了呀?这里为什么编译通过了。
08:00
按说不应该啊,你看这里通过了。Java c t02这Java。那本来这想说一下那个什么的啊,因为这块又少少考虑了各位啊,少考虑了它是object object。嗯。这样同学们,咱们先不管它啊,先不管它偏了讲偏了啊,跑偏了咱们别跑回来啊,再跑回来这个参数先别动啊,先别动,你不是重载啊,不是重载,各位不是重载先,咱们先不说这个啊,先不说这个,就是这个地方啊,你重写负类的方法,只能是说把负类的这个方法从这复制一下啊,拿过来这个参数,假如我们先解决这个问题吧,假如说这个参数object我们访问不了,应该怎么办?是不是应该做线下转型,因为刚才在这儿我们是不是把这个放开了。来,我们编译一下。大概是不行啊。对吧,不行的原因是什么?我说了是因为我们OBBJ里边没有,所以这个时候我们在这干什么呀。
09:06
哎,把它转型一下各位,但转型之前我们要干什么呀,判断一下吧,如果说OJ instance of,如果它是一个什么。My time。我们是不是在做强制类型转换?转型吧。好,这个大家能看懂吗?如果OBJ它是一个my time的话,我们把OJ转成my time,那这样的话我叫做T吧,那我能不能用T去调用它的年月日啊?好各位,这样的话,我是不是就把我们的年月日就取出来了,来我们再编译一下啊。
10:00
刚才有有点有点跑偏了,各位啊,先不用管,呃,一会儿咱们到时候去解释一下这个事儿啊,解释一下这个地方先编一下T02,就是说我们重写复类方法的,把这个方法拿过来,拿过来之后这个参数还是写object啊,因为你object这个类里边这个方法的参数object,所以这块就写object就行了啊,然后我们ES方法往下第一个年月日拿到了,第二个年月日也拿到了,是吧,拿到之后怎么办呀。我们在这是不是应该比较啊,对吧,If什么各位,如果上边这个年一要等于等于这个年二,并且还说MONTH1要等于等于MONTH2。各位家好,大家看好啊,这里都是int int int啊,都是int类型,用双等号,能不能比较?能吧,年相等,并且月相等,然后并且说我们的日是相等的,那OK,没问题,返回一个处。
11:02
对吧,大家想如果程序能执行到这儿的话,是不是就应该返回false。就是程序能够执行到,此处表示对象不相等。表示日期不相等。因为你的OBJ压根连个什么,你OBJ压根连个mytime你都算不上,你想你到这儿的话,是不是代表代表什么OBJ根本就不是个mytime类型的呀。你如果连个mytime你都不是的话,那咱俩肯定不一样,肯定不一样对吧?哎,你是一个飞机,我是个电脑,那肯定不一样啊,所以程序能到这儿的话,就return for就行了。在这大家看啊,是不是获取第一个日期对吧,This嘛。我再强调啊,有些可能听不太懂这一块啊,t1.es调这个方法,那这个this是不是指的就是T1啊,然后我们再往下这个位置,我们为什么要转强转,为什么这样做不行,因为我们OB里边没有这个,没有这个,没有这个我们再下这块呢?哎,判断O它是一个mytime的话转型,那那你想想这个if语句你都进不去的话。
12:19
程序到这儿的话,你这个没执行对吧,到这儿的话是不是足以说明我们的日期是不相等的,你想因为return语句一旦执行,整个方法就结束了。如果程序弄到这儿的话,证明这个没有执行,这个没有执行,这说明日期不相等啊。对不对,所以for就可以了啊,那大家看现在这个程序这样写的话,我们这块。再运行一下。因为我T1表示的时间是2008年8月8日,我T2表示的也是这个日期,我去编译一下各位,然后我去运行走。好,大家看这这一回这个结果是不是就是处了。
13:02
对吧,啊,就是处了啊,那么接下来我在这再创建一个啊,在创建一个新的日期叫my time t361个MY,假如说叫2008年的8月9日。8月9日各位,那现在我在这儿调用谁呢?调用我的T一点equals t3这个结果就应该是false对吗?因为你T1表示的是2082008年8月8日嘛,你T3表示的是2008年8月9日嘛,你本来两个日期就不相等,所以equal方法反过来应该false吧,来测试一下Java c变异加行。好,大家看这个结果是不是如我们所愿,这个结果是不是就是false,那就是false,那这样的话,我们写的这个E方法能能不能用啊,到目前为止各位能不能用,各位给个回应,现在我们这个ES能不能用?
14:06
是不是好用了,如果两个日期相等的话,大家看是不是就是true啊,如果两个日期不相等的话,是不是就是false啊?对吧,两个日期不相等就是false啊,两个日期不相等啊,就是false对着呢啊,两个日期相等就是true啊。
我来说两句