00:00
好了同学,那咱就继续再往下吧啊,咱们再再接着往下来,这块我就先给它关了啊。嗯,我们来重点研究一下一个,呃,引用类型的一个数组,好吧,引用类型的数组啊,还是一维数组,各位啊。Class,我们叫。T07。一维数组的一维数组的深入。啊。引用数据类型的数组,或者是数组中存储的类型为。引用类型。引用数据类型啊。呃,那么这块的话,咱们这样在这里定一个class,我们叫animal。然后呢,这个animal呢,里边呢,有一个方法,这个方法呢叫move。
01:05
叫move啊,然后呢,sit.out打印输出,我们这叫animal。很简单啊,那么接下来我们在这里我们创建一个创建一个animal类型的数组。Animals对吧?Animals,你看自动加SD工具太神奇了啊,来一个什么呢?或者说我们用大框也行,对吧,都行啊,都行,你静态的方式吧,静态塑造方式啊,你看animal ae,你有一个animal。是不是II什么呀,叫A,是不是又一个animal啊?对吧,哎,把这个A1怎么着和A2是不放进去。哎,这个。接下来。我们能不能对?
02:02
这个animal数组进行遍历。For循环吧,I等于零呗,下边零开始是不是A小于什么呀?这个animals吧,这个数组点什么问呗,哎,加加,那我问大家从这个animals这个数组里边取出的每一个元素,通过下标为I,通过下标I,就这个数组下标I取元素取出的是不是都是animal啊。对吧,然后点什么呀。好,大家看这个代码能看懂吗?能看懂的话打个零,扣个零来,能看懂扣个零。Animal animal。先看一下。就相当于说数组当中啊,存储的是animal。A1是吧,和什么,A2是不是,哎放进去了。然后接下来怎么着,在这儿我循环是不是每循环一次,是不是取出数组里边的其中一个元素。
03:04
取出其中的这个元素之后,它是不是一个animal啊?对吧,啊,就是你int类型数组呗。嗯。里边123,那你for循环在这取呗,I等于零,I小于什么呀?A点什么Les呗,I加加。RA这个数组中括号下标为I,那你取出的值是啥?不是int类型吗?是不是啊?你现在这个int类型数组啊,所以你每循环一次,通过下标取的东西是不是就是int类型,如果你是个I类型数组呢?你是animal类型的数组,那你在这每一次循环取出的是不是一个animal啊?对吧。这不animal中括号I吗?取出是A呀,a.move吗?这两行代码能不能合并起来呀,各位。
04:05
直接调这个数组。数组中括号I时,指定某一个下边上的元素点行吗?行不行,这是不是代码合并啊。你上面那个是没取出来一个是吗。对吧,那你这个代码合并起来。怎么合并啊,中括号艾玛。对不对,这拿出来付给个变量输出了,你这边也一样,你拿出来一个付给这个变量,然后再调方法,你也可以直接调方法,没问题,因为animal是一个animal数组,Animal数组中括号I是指定下标某个下边上的元素嘛,取出来之后怎么着啊,直接就是一个animal对象,你只要是animal对象,它就有move方法吗?是不是只要是一个animal对象,它就有move方法,所以你就可以直接调move就行了,你直接点move啊点move吗。
05:05
是不是点啊。第二。好,大家看啊,右侧这块。读态还没用呢啊来这块咱们返回类型是void吗?这是返回boy类型,你看这返回值会看吗?这是什么呀。啊,这是方法名吧,这是什么呀。形式。数组调方法,谁跟你说是数组调方法?这是数组调方法吗同学?这个不是数组调方法,我的天呐,朋友。这个是数组,你中括号I之后取出的东西是个啥?Animal,你这个方法不是数组的方法啊。这不是速度,你又自己又又自己把自己绕进去了。
06:01
哎呀,我的天,同学们这不是数这个木方法是他的。你move方法是他的啊,这是数组,你调一下这个animals,它有move方法吗?这是数组吧?这个方法是调的数组的方法吗,同学?这个move方法调的是前面这,你认为这这是个数组是吗?不是啊。它是数组啊,它是数组,但是你经过中括号I之后,取出的元素就是一个animal对象了。你调move方法,不是数组上的move方法,你数组对象没有move方法,你的这个move方法是谁呀?是人家animal的move方法啊。
07:10
五中我感觉又又掉进去了呀。这怎么是这个目录方法,怎么是数组的方法呢?不是啊。这个木方不是数组的方法,你推一下逻辑啊,Animal是个数组中括号I取出的是什么?出取出的是你下标上对应的元素吗?你这个数组下标上这个元素就是A1或者是A2啊,你现在其实这个东西就相当于是A1还是A2去调目方法吗?那到底A1还是A2不知道,你用animals中括号I呀,点move啊。这个目方法怎么是数组呢?这个这个目方法不是数组的啊。
08:02
是数组当中Java对象的目,方法就是数组当中animal。对象的目方法啊,这个代码Java代码可不能乱掉啊,数组那个中括号。那你这个中国就是一个语法呀。就是就是中国I是用来取元素的呀。你能看懂这个,这是个数组吗?五中,我问你,这是个数组不,这是个数组吗?应该说谁是数组啊。应该说是个数组对吗?中括号I连起来的话,这种语法是干啥的呀?是不是从数组,从数组里面取元素的呀?这一个全部联合起来,是不是代表数组里面元素啊。听了半天,这个这个这个还是没懂。
09:07
五中五中啊,来回答一下。你现在给我取出第二个元素来,怎么取?在这聊一下天,各位那个五中啊五中吧,取第二个元素怎么取,语法是啥?第二个元素的语法是什么?五中也来一下,五中没事,咱们这个不懂没关系,我觉得这个可以讲,可以咱们咱们可以可以好好去去去探讨一下这个东西啊嗯,下边二吗,怎么写代码怎么写代码怎么写。就是代码怎么写。取出第二个元素。
10:04
它的语法是什么,我我就要第二个元素。五中五中在不在五中。就我我现在这是一个一位数组,我想取第二个元素怎么取。就是想没事,咱们可以探讨一下,就是想取第二个第二个元素。怎么取啊?怎么学?A。中括号一。啊。好,五中,我问你这是个数组吗?
11:00
五中这这个是个数组吗。这是个200对吗?五中这个这个是不是个200,这不是个数组吧。你A中括号一是不是代表是个200这个数字啊。那我再反过来问你,Animal中括号I是谁?你把A1和A2是不是放进去了。你中括号I,这个I是下标从零开始零一吗?那如果这边是零的话,ANIMALS0说的是不是这个东西。你这个东西是不是它,它是不是它,它里边有没有木屋方法。所以这个地方animals中括号零能不能去点move,之所以它可以点move的原因是什么?是因为animals中括号零代表的是A1啊,A1是个动物啊,动物为啥不能木啊?
12:02
所以这个木方法不是数组上面的啊。这个才叫数组五中啊,加上中括号下标加上去之后就代表是数组中的元素了。嗯,就是哪一块不太明白,到底是A是一个数组啊,A0是数组中的一个元素。A1是数组中的一个元素,A是一个数组啊。A是一个数组来,Animals是一个数组animals I就是数组里边下标为I的那个元素点move。
13:03
好了,运行。没问题,那么数组是。能不能放别的?比如说我在这里再来一个class。这个class叫product商品。商品类现在在这儿呢,我再给一个animal数组。ANIMALS1或者是。Animals。一个二动态初始化一个。长度为二的。Animal类型数组。
14:02
啊,Animal类型数组,各位。那么ans。这个数组下标为零,我负一个值,各位啊,看好了,我用一个什么呀,Animal出来。这表示什么呀?创建一个animal对象吧,放到数组的第一个位置上,第一个盒子中。没毛病吧?跟这个一样,你想把300改成400怎么做?A2下标为二对吧,012嘛,下标为二,给它改成400负上值,盒子里边重新给它放一个值嘛,是吧?啊,那我们这里呢。是不是这个数组有两个位置啊,一个是零对吧?哎,等于什么呀,New animal。
15:05
是不是?看一下不合并的时候会好理解一些,嗯,按说你合并应该也好理解啊,你要觉得合并不好理解的话,那我觉得这个东西你得再反映反映,再反映反映。这是第一个位置啊。放的是一个animal,我们去运行编译没问题,运行它报不报错,大家看啊,没有任何问题是不是,哎,也没有输出什么啊,你不用管,那么这个时候呢,我往第二个位置上。放一个什么呢?商品行好,大家看编译是不是错了。也就是说,Animal这个数组当中是不是只能放animal不能?对不对啊,Animal数组中只能存放animal类型。啊,不能存放什么类型。
16:02
所以这个是不允许的。不允许的啊。那如果此时此刻听清楚了啊,有一个类叫做cat猫。去继承了animal,好了,各位注意听了啊,K是不是一个子类,那么这个子类呢?我在这里重写这个方法。我们叫做。猫在走猫步啊,猫在走猫步,那么现在我能不能这么干呢?Animals中括号一下标为一,就相当于是第二个位置,我能不能给他传一个K进去?好,大家看我是不是写完代码之后。程序也没编译报错。对吧,行不行啊。
17:01
Animal数组中可以存放K类型的数据,因为K是一个animal。Cat是animal的子类。听懂了吗?他的孩子能往里边放。是没问题的,你看编译和运行都没问题。是吧?这不都没问题吗?对不对,编译和运行都没问题啊来,那么接下来我们来一个全新的各位啊,大家看这个行不行。比如说我再来一个bird子类,这个呢,去继承谁啊?Animal能说得通?
18:00
我在这里干什么呢?重写这个方法,我叫做bird fly。Bird。FLY。好了,那么接下来啊,我在这里这样写代码,大家看好了啊,创建一个animal类型的数组。数组当中存储什么呀?存储I,存储K和bird。啊来怎么存大家看啊,Animals对吧,然后数组吧,Animals animals或者是。叫啥呢?Animals行吧,来大括号啊,大家看一个什么出来一个什么bird来。行不行啊。这是不是存了两两两个对象?你有一个cat对象出来,你有一个bird对象出来,没问题吧?
19:01
该数组中存储了两个对象的内存地址。对吧,For循环,各位for循环。Int I等于零,I小于animals.i干什么加加。是吧?好,那么现在我们数组里边存的是K和bird,或者说你不愿意看这个代码,可以这样做。怎么做呢?我在这里单独开六出来行不行?行吧,我的牛出来行不行?行吧,Animal数组给一个行不行?来把它复制一下拿过来大括号CB对吧?哎,一样的啊,这样写也行,上面这种方法写也行,拗两次放进去对吧,然后这块呢,或者是直接拗两拗,拗两次传进去就完事了啊。
20:08
那么我们现在对这个数组进行便利,那你说我下标为I取出的东西能付给K吗?编译器能让你过吗?不行吗?因为编译器只知道animals这个数组里面存的是一个什么类型,对吧。是不是?你不能这么干啊。你想move的话,你可以直接调animals啊。对吧。中括号I啊,这是不是取出的其中一个元素啊。这个有可能是个啥。这个啊,取出来的可能是个啥,可能是K,也可能是。
21:03
For。不过啊,肯定是一个什么animal没对吧,哎,一个取出来,这个取出来可能是cat,也可能是bird啊,不过肯定是个animal。数组嘛,取出的下标I的元素,那肯定是animal。哎,如果,如果调用的方法是负类中已经存在的方法。不需要什么向下转型,直接使用副类型引用调用即可。我说的有没有道理?各位,有道理吧。animals中括号I。取出的是一个animal啊。对吧,Animal,那么取出的这个animal我可以去调方法啊。
22:01
它将来自动,如果你取出来是一个猫,那就是猫在走猫步。因为方法重写了呀,子类去继承父类重写了吧。是不是重写了?对吧,所以说这块是不是不需要线下转型,直接用animals中括号I取出animal之后move就行了。来,我们执行一下。你看猫在总包部和bird fly吧,但如果说你子类现在在K里边有个特有的方法。Public void,比如说猫这块呢,是。Mo。猫有猫catch catch mouse吧,还是catch mouse啊,抓老鼠。猫抓老鼠,下面呢,再来一个特有的方法,这个特有方法呢,叫做sing吧,唱歌叫做鸟儿在歌唱。
23:03
那这个时候如果想调这个和调这个,那妥了,你这个代码就不能这么写了。对吧,哎,你怎么写啊。如果。Animals,这是个数组吧,数组中括号I是不是取出来的那个元素?是不是取出来那个元素,然后instance of吧,如果它是个K的话,我们怎么做?Else if对吧?如果它animals下标为any的元素instance of,它是一个bird的话怎么办?对吧,你是个K那就转成K,你是个bird就转成bird嘛。对不对?Animals是一个数组下标为I的这个元素取出来的,哎,判断一下它是否是一个K,如果是K,那么这个时候我们应该怎么做呀?应该转型吧,哎,转型把这个东西加一个K,强制类型转换K。
24:06
Cat来cat去,Catch mouse,那对吧,如果你是一个鸟儿的话,妥拉它强制类型转换成bird,鸟儿bird bird是吧,Bird fly。啊,不是fly STEM。唱歌你看待会应该这样写的。调用。调用子类中特有方法的话。调用子对象吧,子对象特有方法的话,需要向下转型。啊,你不转型不行啊,你调不了,你试试animal是不是中括号I,你中括号I是不是从这个里边取,这里边数组里边只认一个animal编译器指道你们animal animal有没有这个方法叫sing啊,叫唱歌啊,没有,你看报错鼠标停到这,你看它提示什么。
25:03
说cannot对吧,说thing在animal在animal in animal在animal这个类当中怎么着啊,没有。Thing这个符号找不到,就他认为animal中括号I从这个数组里取的是animal,你animal里边没有thing啊。对吧,你定不了啊。是不是animal中没有thing啊,就是animal中没有thing方法,你需要向下转型,你才能够调它的类特有的方法再运行,你看这次和刚才就就不一样了,编译和运行就通过了,你看。猫抓老鼠,鸟儿在歌唱。是不是,哎,那这个呢,就相当于是我们一维数组当中,如果存的是一种引用数据类型,不是基,不像这种基本数据,你看基本数据数据类型多简单,里边就是一百二百三百这些数字就行了。对吧?哎,你如果是一个引用数据类型的话,你这个数组当中存在这个元素啊,哎,记住啊,不是对象啊,数组当是不能存对象的,存的是对象内存地址,你扭出来这个对象内存地址是A1 a1放到这儿了,就相当于说我这个盒子里边,我这个盒子里边放的是一个对象的内存地址,注意啊。
26:14
对于数组来说,如果元素是。是,呃,对于数组来说啊。实际上啊,只能存储什么呀,Java对象的什么呀,内存地址啊。数组中存储的每个元素是引用。Animals只是定义类型,呃,数组里面存储两个对象,这两个对象一个猫一个鸟啊,嗯,可以这样理解啊,可以这样理解。
我来说两句