00:00
关的,我们下面呢再来看一个跟镜子相关的,叫做撕开了类型的检查和转换,这个呢也很有用,前面前面我们已经用过了,我们来看要测试某个对象是否属于属于某个给定的类,可以用is instance和as instance方法将引用转换为子类的引用。啊,还有一个class off可以获获取对象的类名,那这个我因为同学们前面是有基础的,我就直接举个例子就可以了,啊举个例子,那么待会儿呢,在这个例子上我们再做一个最佳实践,就什么时候咱们会去用到is instance of和as instance of,好,这个因为同学们是有基础的,我就快速的给大家举个例子啊看先看一下这三个呃这三个这个呃方法的一个作用,Classo呢,可以得到这个类对象的类名。Is instance of呢,可以判断是不是这个类型as instance instance of呢,就是转换强转为我们需要的这个T类型,T类型好,同学们,我们快速的给他举个例子。
01:06
好,这个地方呢,叫做SKY类型的转换,来一个标题三。来一个标题三,这有个基本介绍。诶,这有一个基本介绍,然后呢,我们来一段代码说明。啊,来一段代码梳理。代码代码说明。好的,我们写一段代码吧,这段代码呢,我也已经准备好了啊,我就写一下吧,我们写一个看看这有个person,有个employee,我用一用,好我们新建。一个文件好,这个呢,我们叫做类型的转换啊,类型的这个cover。好,Convert。好,来吧,我们新建一个小案例。好,走。呃,因为我会用到这两个类呢,我就干脆哈,我就干脆把这两个拿过来给我用一用,给我用一用就可以了。
02:01
好,看到代码我把它拿过来,拿过来以示区别呢,把它改成200,这边都改成200,这样名字它就不冲突了。这样就不冲突了。好,我们来看一下这三个方法的使用啊,这三个方法的使用先看第一个就是class of的使用。Class off的使用这个呢,可以得到,可以得到什么呢?可以得到这个对象的啊,或者可以到得到这个类名。类名,我举个例子,Print,比如说我们这有一个class,我直接class of。Loo。诶,这为什么没出来啊class。Class off。诶,为什么不出来呢,这个。啊,第一个是小写的啊,第一个是小写的class of,好比如说我这有个string。对吧,有个实训,大家可以看到这个地方,我们一输出啊,对方就可以输出一个内容,我们执行一下。
03:01
这样他会干什么呢?得到这个string的它对应的一个类名。啊,可以看到这边名字就出来了,对,那除了这个之外呢,我们也可以这样子做,还可以怎么做呢,还可以这样子,我们写一个就是写一个,呃,一个变量的名称,通过get class点开这个呢,我们是通过Java,类似于Java这种反射机制来得到一个类型,这个也是也也是可以的,那我们看一个案例。比如说现在呢,我有一个字符串S等于,比如叫,叫什么呢?叫king。然后呢,我们也可以通过这个方式来获取点get class啊,然后点get name。这个就是使用反射机制了啊,反射机制好,我们来看一下。这个地方呢,也能拿到。他的这一个名称啊,一样的。
04:02
好,紧接着我们再来看一个案例,现在再看一个案例,同学们,我们看一下iis is instance of和is instance of的使用,我们来看一下is instance of啊,Instance。还有一个instance。Of好,我们来举个例子吧,呃,现在呢,我我先去创建两个对象啊啊VRPP等于六一个person。PERSON200,好,这个就出来了,那么我在创建一个对象,叫做employee,等于六一个employee。200好,这两个呢,大家都看到是一个是person对象,一个是employee对象,现在我将什么呢?将这个子类。将子类啊子类引用引用给父类,这个是向上转型是自动的,向上转型是向上。
05:06
诶,向上。写错了啊,向上转型,向上转型呢,它是这个是可以自动转换自动的,比如说现在我写一个什么P,我把这个employee。付给P这个代码是可以直接啊看看啊。他们之间是没有金融关系吗?难道。哦,我这是写成这个了啊,原因是这好这样就可以的,我把子类给一个父类是没问题的,这是相当转型,但是因为种种原因,有时候我们需要把一个父类的引用,再重新转换成对应原先这个子类啊,那么如果我们要什么呢?将父类,将父类引用。将负类的引用又重新啊重新。重新转成,转成什么呢?子类子类引用。
06:03
这个有时候还是很有用的,因为有时候我们要我们在多肽的时候就会用到这个特点,因为你你在多肽的时候呢,你可能是很多此类交给了一个负类引用,但是我要在里面判断你是哪一个子类,然后调用相应方法就会用到它,这个时候你就转不过去了,你看啊,如果我现在反过来啊,比如说va,我写我写一个VR。VR。EMPLOYEE2EMPLOYEE2等于P1,你看这个时候代码诶。P1哦,这地方他用的是类型类型自自动啊,我现在你这样给了过后,实际上这个1P2是不是还是PERSON200啊啊这哦不,你现在把这个。现在你把这个给他了,其实它还是一个负类的引用,是是这意思吧,就大家看你你是调拨了一个方法的,比如说我这里父类有个c hi。我在这儿再写一个方法。我这再写一个方法,比如说我写个C哈。
07:03
哦,我们慢点来,我们慢点来来啊,同学们看。我我这样我这样给了过后,其实这个音一篇,诶我们看是什么,它其实还是指的是吧,因为你你在这,你在这儿还是指类,但是我们要转一下,诶我们看看这个是逻辑啊。是,这个地方是把一个子类的引用交给了类。呃,然后这个地方P1,我们看是什么类型的P1。是这个。哎,P1是一个负类是吧,P一个负类,那现在我要这样做一件事情,VAR employee2等于P1。好,但是呢,大家看。EP2,你看这个是PERSON200,但是我希望你这个负类引用重新转成子类引用,我就是我现在要向原先是向上转型,现在我要向下转型,好即。
08:06
什么向下?向下转型,那么向下转型呢,你这个时候你你不能你看怎么实现呢,好,我们要这样做一下了,这样子点as instance of。然后呢,写上EMPLOYEE200,好,当我们这样做完了以后呢,我们可以看到EMPLOYEE2已经变成这个了,相当于转型成功,那你转型成功的你就可以调什么呢?你就可以调它此类的方法,如果你没有这个转的过程中,其实你是没有办法访问到此类的c hello的好,我们来用一下好2.chi。啊C哈啊c hello就可以用了,C hello就可以用了,好这个地方我们就体现出向下转型这个特点,好我们来执行一下。代码呢,不会报错。好,这个代码就不会报错。好,我们执行没问题啊,代码是正确的,好,通过这个小案例呢,我们就把这个is instance of,呃,一前面我们讲过,我就不再多说,我们把这个案例拿过来放到这儿。
09:15
好,把这个讲完过后呢,我们来写一个案例,我们来看看这个的最佳实践是怎么来的。来做一个最佳时间案例,我们来充分的利用一下刚才学的类型检查和转换,请看一个案例。嗯,类型转换,类型检查和转换的最大价值是在于可以判断传入对象的类型,然后转成对应的子类。对象进行相关操作,这里呢也体现出多态的特点。其实这个地方确实体现出多态了。你比如现在。我有一个person,里面有两个类,一个是employee,一个是student,那现在我要写段代码,我们来看看。
10:02
它的一个使用价值啊,来,朋友们,现在我就在这儿写一个案例。吸血压力。我们不在原先那么写Type Convert的一个案例case。好,同学们,我们写一下。好,我快速写一个啊,比如说这一个,这有一个person。Person,那么四三我们来一个,来一个400好400。然后这里面呢,我们假如有这么一个方法啊,假如这边有个方法啊,Print啊,就是那个DF叫做呃,Print name。PT name。好快速的写一个,我就不写那么多说了,直接写这个东西啊,叫PERSON400里边的一个方法,也是区别叫400的一个方法。好的,然后呢,还有一个方法。
11:02
还有一个方法,我们写一个叫做COK。好,这边又打一句话,就是PERSON400里面的OK。OK,好的,我们现在呢,再来写一个子类,这个子类呢,比如说有个学生是student。让他去继承我们的person。好写完了,然后呢,这里面它有一个属性,比如说有个属性我就写到这里,比如他有个学生叫学生ID,默认给他一个值100号。然后呢,这里边儿它有一个方法,他有个什么方法呢,他重写了。比如说他重写了这个方法。哎,这版也改成400,给他对应一下。失败,好的。失败,然后这边我把它重写,需要加一个override代码,没错,然后呢,我写一个叫学生400的一个方法写完了。好,然后这个方法我不重写。
12:02
然后我写一个自己的一个方法叫DEF。DNF干什么呢?就是说他写的一个方法,比如说叫做CRY。Correct。好CRY方法,那么写一下叫什么呢?叫做学生输出这个学生的信息比较。比如说这个叫受,呃,CRYCRY,好写一句什么呢?学生的ID是。学生。学生的ID等于加上this点16的ID,好,紧接着呢,我们再写一个之类,再写一个之类,我快速写一个啊叫employee,那么这个employee呢,也继承person里面改一个名字叫employee ID给他一个名字叫800。好,里面他也重写了,重写过后呢,他重写了复类的一个方法,他自己也有一个自己独立的方法,比如说叫做show for,那么他的方法改成什么呢?改成雇员的。
13:01
啊,雇员的雇员。雇员,ID好,这面我们调查是this.employee ID好,写完了,那现在我要做一件什么事情呢?同学们,我现在要做这么一件事情,我这里。写了一个多态的,写了写了一个参数多肽的多肽的一段代码,我要做这件事情。那么怎么写呢?DEF,我写了一个叫函数,叫test,然后我在这里接收的是一个什么呢?我接收了一个负类。PERSON400。然后我要在这里面干什么事情呢?注意大家都知道,因为我这样写了一个person,就意味着他的此类对象,包括他自己都可以传进来。这里面注意听这里面是什么,嗯,因为在这个呃,O op中,Op中一个一个父类。负类的引用,引用可以指向可以可以指向或可以接收都可以啊,可以接收。
14:07
可以接收,可以接收什么呢?所有所有子类的子类的这个这个这个应用啊应用好,那现在呢,诶这样就体现出多态了嘛,这样其实就是参数多态。呃,同学们以前在老师讲的应该讲过这个参数多态的概念,好,有了这个东西,我要干什么事情呢?我我希望在这里去判断你到底是哪个子类,然后我调用相应的方法,你比如说如果你是employee,我就调它的收银,如果你是学生,我就调这个CRY,你看现在你是调不了的,比如说你用P来调。你用这个P你去调,你只能调他自己的。Print和COK,但是你没有办法去掉它子类的CRY和这个show for,但是有时候我们就需要去向下转型,好,同学们在学这个地方的时候,老师应该是讲过的好,那么现在我们开始玩一把,好使用什么呢?就要使用刚才我们讲的这一个知识点来搞定这个事儿。
15:11
这个呢,在你们SC的元代里面有大量这种代码,就是干什么呢?为了做到一个多态,因为你将来一个负类,下面所有词类都交给他,我一个函数搞定,我不要求,我不需要写两个三个四个。好对不对,好,现在我就做一个判断,如果如果这个p is,它如果是employee这个400好的,那么现在就可以这样调用了。我怎么调用呢?就p.as instance of,然后强转为它点,你看这里面就有受音符了。哎,这么就修佛了,那当然他本身就说出这句话,那我就干脆。就不需要这样子了,我就直接这样做。因为我在前面已经判断了,所以说他就一定可以转成,这个是有先判断。啊,先判断这样就O了。
16:01
哎,先判断的,那紧接着呢,如果我再继续判断LE。快速写一下啊呃,就是p.is如果他是什么呢?他是学生。好,他是学生,我就去掉学生的方法,就as instance of。然后走16人。点啊点我们的这个快。那么这里面我要强调一点啊,同学们,就是你这个转换的本身,就是如果我这样写的话,p.as of employee,呃,失败,对这个P本身。没有任何影响,再说一遍啊,千万不要认为我写了这句话过后,P这个类型发生变化了,P没有变,他只是返回了一个新的类型而已,这点在前面老师应该讲过,我多说一句,给有些同学说一下啊,p.as instance。Instance of,这个呢,EMPLOYEE400。
17:03
对什么呢,对。对这个P没有任何影响,对这个P的类型没有任何改变,没有没有任何改变,而是返回了一个新的类型。啊,没有任何变化,没有任何变化,而是返回的,返回的是什么类型呢?是这个employee失败这个类型,这个在Java里面老师应该是说过这个事的。好,这里大家强调一下,最后如果你两个都不是,我就说转换无法成功,就是转换失败。转换失败,好老师呢,这个就写完了,我来测一下,看看能不能使用试用一下啊,首先呢,我来创建两个子类,一个呢是学生。六一个学生。好,400。六个学生,好,这个写完了,再来一个,就是我们的什么呢?就是我们所说的那个叫做employee,再写一个employee,好,这个就写完了,写完过后我快速掉下test,传进去student。
18:02
好,再传一个test employee,好,这写完了代码看有没有问题啊,这个第一个呢,会先输出学生,我这写一个。再把这个打一下啊,学生这学生ID,这个是关ID,我们执行一下。走一个。好,我们执行一下,我们看看这段代码生效了没有,我们发现,诶这里有个转换失败,可能写错了。有一个转换失败。呃,第一个,呃,Student。哎,这这写错了,不好意思啊,这不好意思,这地方应该给的是学生。啊,Student失败,好再来跑一下。运行好这个就OK了。我们看到一个是学生,一个是雇员,咱们就拿到了啊好,这个就是他一个最经典的案例。好,同学们,那么这个案例呢,我就给大家板述到这里,好,现在呢,快速的给大板述一下。好,同学们,我们刚才讲的是。
19:00
诶,一个是这个内容啊,类型转换,我们做了一个最佳实践案例。给大家写到这里来。SC的一个最佳实践。给大家写到这里。以后大家想一想,在什么时候能够用到这一个知识点。最佳实践的案例呢?给大家板述一下。写到这儿了啊,同学们。放到这就可以了。啊,大家一看以后就知道什么是地方,可能用到我们这个知识,好,我把刚才这个图呢也给同学们拿过来。试一试一通。好各位放到这儿啊,放到这儿欧了。好,那到此呢,这个是开的类型转换,这块我们就给大家讲到这儿,截取一段视频。
我来说两句