00:00
不在,再直接举个例子啊,写完这个例子咱们就休息一下,零三。看好了啊,TEST03。比如现在呢,在这有个class。嗯,这个class我们叫什么呢?起个什么名呢?注意看啊,不是瞎了啊,不是眼睛瞎了,嗯。大家举个例子啊。嗯,比如说这块呢,我就就就就叫什么呢,就叫哎叫test比较不合适是吧。嗯。就叫animal test吧,Animal啊,然后里边有个方法,有一个方法,各位看好了,Public void。嗯。我们就叫做。
01:04
这个test吧,这个方法里面需要传的参数是一个animal参数。嗯。代码这样写的。啊,代码这样写的。那我问大家。这个闷方法有没有可能是一个程序员A负责编写?就是问,方法是程序员A负责编写。是吧,这个类当中的这个方法对吧?Test的方法啊是什么呀?是程序员B负责编写,你好好想想,这个方法的参数是一个animal。这个test方法的参数是一个animal对吧?Animal好,我问大家一个问题啊,将来别人去调你这个方法,就是你在写这个方法的时候写完了对吧?将来别人是不是有可能去调你这个方法,别人在调你这个方法的时候。
02:10
他往这个T的方法里边传的是bird还是一个猫?你在大括号里边是不是不知道。你好好思考一下。你写的这个方法别人会去调用,对吧,别人调用的时。可能给你test方法传过来一个什么呀。当然也可能传过来。一个K。你好,想想是不是这样的。
03:00
这个程序。Animal。我们可以把它放到外边。各位,这是一个类。新建一个。加public。各位看好了,这个类是我写的,假如说。你。现在在这写了一个程序。你是调用程序,就是说我负责写这个方法。那对于我来说,我。这写了一个animal,就意味着你将来是不是可以往这传一个鸟,也可以往这传一个,但是我不知道你要传啥是吧?就是对于我来说,我不知道你调用的时候给我传过来一个啥。你明白吗?
04:02
我不知道你要给我传。总之,你传过来一定是个animal。你传过来有可能是一个bird,对吧,因为将来new bird这个语法是不是多态,New一个K是不是也允许,也就是说我往这个变量上,往这个A变量这个位置传东西的时候,我是不是既可以传一个猫,也可以传一个鸟过来啊,但是我在写这个大括号里边代码的时候,我不知道你给我传过来一个鸟还是个还还还还还是个猫,我不知道,我只知道传过来一个类型是是属于animal类型的。那对于我来说,我是不是应该判断一下呀,咋的我在那直接叭拿着A就强转,转成K完了之后我就KK就就就就这样掉呗,你这样会有什么问题各位。有什么问题?好,请同学们告诉我,如果我在大块硬编码,硬硬写成这样,会有什么问题?各位告诉我。我硬编码写成这样,如果将来调这个方法的时候,你给我传过一个猫。
05:03
没啥问题。如果你将来调我这个方法的时候,你给我传过这个鸟,那么我问你这个程序运行的,运行的时候是不是就就会出问题。是就出问题啊。你你你好好想想啊,你看看我在这个程序当中,我就掉了,我怎么去调你这个方法,各位这个方法是个实例方法,是不是一个实例方法,实例方法调,要不然谬对象。Animal at new,一个animal test,你有完对象之后,At去调什么?这个对象有了吗?At去调什么?去掉test的方法对吧,好去掉了啊test的方法,Test的方法调的时候里边需要给他传一个什么东西进去啊。里边需要给他传一个啥进去啊,传一个animal进去吧,好,我问大家你一个K行不行。好,我问大家at,再调test,我能不能一个bird进去啊?
06:03
能不能就是我调test的方法的时候,我给你传一个cat对象,或者我调这个test方法,我给你传一个bird对象。都行吧。是吧,那你这个cat对象是不是就将来就会就会传给谁传给这个A是吗?如果你现在是new这个破的对象,你是不是就传给了谁传给了我们这个A呀,那如果你A上来就在这转成KD或是不是就有点有点有点。太扯了,因为你A有可能是个啥cat也有可能是个啥呀,Bird嘛,也有可能是个是个鸟儿嘛,是不是。对吧,所以像这种情况的话,就是所谓的眼睛,眼睛看不见了,肉眼看不见了吗。像这种情况是不是就等于是肉眼看不见了,因为我们肉眼只看见一个A吗?我们只看见了我们这个类,这个程序是我写的,我只看见了我这个类型,A是一个animal类型,我不知道你将来在调我这个方法的时候,到底要给我传一个什么东西。你有可能给我传过来个K,也有可能给我传个board过来,都有可能。是不是,哎,所以这块我们要加个判断嘛,对不对,哎,你看你不加判断会有什么问题,来我们编译运行一下Java c编译test。
07:08
零三.java来Java去运行T03走,你看有一个就报错了,猫没问题,猫没问题,但是后来这个出问题了,说鸟儿啊转转成不了cat,这个鸟转成不了cat什么意思,因为你第二个确实在这个位置上,你扭了一个鸟进去,鸟进去之后吧嗒一下转成猫,你肯定有问题啊,所以在这呢,你就加判断,如果说我们这个A明白吗?它instance of是一个猫,你再给它转成猫,如果IE,如果你这个a instance of谁呢?哎,一个bird OK,那现在我们就的B,哎转成什么呀?哎,Bird,然后呢,把这个诶转一下,转完之后,接下来我们B点什么呀?哎,我们叫steam,那这样就没问题了,那没毛病。
08:02
是吧,你传过来是一个猫,我就转成猫,如果你A呀,传过来的是一个bird,我就转成bird,如果是猫,我让它抓老鼠,如果是鸟,我就让它唱歌,对不对?所以这个时候呢,这个程序我们再去编译,我们再去运行,大家看猫正在抓老鼠,然后鸟儿正在唱歌,你看非常非常棒啊,非常非常棒。那这样还不能省略了,如果子类有很多种类的。那也要写那个instance of判断吗?不不不不,这这这个有道理啊,这个必须得写,没没没办法,这个得写,你就算有一个你这个分支就得写100次。没办法啊。如果子类特有方法特别多呢?没办法,只能这样,只能这样,没别的招,没别的招啊,没有别的招,一般特有的方法比较少,公共的方法都会提取到负类当中。啊,就是这么干,你有100个分支,你就得写100个分支是正常的啊正常的你看现在这程序完美了,你看。
09:01
是吧?Java c编译,Java运行,你看完美吧,猫正在抓老鼠,鸟儿正在唱歌吗?是不是?哎,不错啊,这样就可以了。
我来说两句