00:00
好了,那么接下来咱们继续往下看啊,没完,那注意看啊,注意看,现在animal不是有个move吗?是不是?好了,那我我问大家一个问题啊,Cat猫它除了move之外,猫是不是有自己特有的行为,猫应该猫除了什么呀,Move之外,对吧?应该有自己特有的行为,对吗?例如抓老鼠,鸟儿总不能抓老鼠吧,所以不是所有的动物都能抓老鼠,所以在动物这个类里边就没有那个抓老鼠的那个方法,然后呢,在我的此类这个cat当中有一个什么呀?哎,有一个有一个方法啊,你比如说public VO叫做catch mouse,哎,理解什么意思啊,叫抓老鼠的方法啊。来system.out点打印,我们叫做呃,猫抓猫正在啊抓老鼠啊,猫正在抓老鼠这样的一个方法,这个方法是子类特有的啊,这个行为是子类型对象特有的方法,各位啊,特有的方法,那么接下来我们猫它有这个行为叫catch mouse,那么接下来我这个程序啊做一个改动,各位看好了啊,我现在的AR是不是一个猫。
01:22
那这样吧,我从这打一条分割线,各位啊。大家分割线啊,分开分开我重新写各位啊重新写,那现在呢,A2A3,然后这边呢,有一个A4是吧,我来个A5,各位看好了啊,我说animal a5。New,一个cat,好,各位,底层对象是不是一个猫?底层对象是一个猫吧,底层对象是一只猫啊,一只猫好了,那么接下来我A5既然是猫,那我能不能抓老鼠呢?好,分析这个程序能不能编译和运行,分析这个程序能否编译和运行呢?
02:04
各位行不行啊这块。根据我之前给大家讲的这个内容来看,你来分析一下,我先把这个代码注释掉,这个行不行没问题,是不是来我们去编译好,大家看编译通过了,那么接下来我把这个放开,大家想一想,这个行不行,因为它底层毕竟是一只猫嘛,是不是,那这块能不能抓老鼠呢?来行不行?不行了,不行。八行就是不行呗,啊不行。编译不过好太棒了啊,各位说一下大家分析程序啊,分析程序一定要分析编译阶段的静态绑定和运行阶段的什么动态绑定啊,动态绑定一个是静态绑定,一个是动态绑定,只有什么呀,只有编译通过的代码才能运行,没有编译根本。
03:02
根本轮不到运行,明白吗?你连个编译你都没通过,你还说什么运行不运行好各位我问大家编译的时候,编译器只知道A5的类型是个啥,Animal对吗?他是不是在编译阶段会去animal这个类这个字解码里边找那个抓老鼠的方法,结果他是不是没有那个方法,所以这个时候大家注意是不是编译器就报错了呀,因为编译器。没有发现你的animal这个字节码里边有这个方法呀,所以编译就不能通过,大家看好说找不到符号,找不到符号91行,你看这找不到符号,这编译器报错了,明白吧,编译器报错了啊,找不到符号,这为什么呢?Y是不是哎,什么原因?因为编译器只知道A5的类型是animal,去点class文件中找catch Mo方法,结果结果没有找到啊,所以静态绑定失败啊,编译报错啊,无法运行,语法不合法,语法不合法,明白吧,你根本就不这样写,你这样写就完了,你这样写。
04:27
对,A5CATCH mouse a5catch mouse。你看是不是,那么你再编译,你看有没有问题,是不是就有问题了,对吧,哪有问题这个呗,找不到符号,说这个方法不存在呗,为啥这个方法不存,因为你看从哪找去了,说方法是开mouse,结果位置是类型为animal的变量A5,在A5里边儿去,他认为A5就是个啥,Animal在animal里边没有这个方法,所以编译就报错了,所以这不行。好了啊,这一块是一个非常非常重要的地方啊,有很多同学老师,哎呀,我还是不太理解呀,这个等号这个后边不是个猫吗?猫为啥不能抓老鼠啊,我就是他抓老鼠,对不起啊,您先过语法这一关,首先编译器它不会拗的,编译器它在它这个编译阶段,它只知道干什么呢?只知道A5的类型是animal animal。
05:20
A,五点move点开着帽子,这样行吗?这是啥意思啊?是个方法呀。A5点什么A5点。A5.move来,家辉同学你有点懵啊,A5现在的类型是animal对吧?A5.move,好,我问大家点move之后他有返回值类型吗?它返回东西吗?它不返回任何东西,你往后点啥干啥呀,你能往后点,你但凡是一个东西往后点是不是前边就相当于是一种对象啊,或者是一种什么呀,引用啊,是不是才能往后点啊,你A5.move,你这个方法,我问你你执行完这个方法是不是没有返回时啊。
06:07
你没有返回值,你往后点个啥呀。咱不能这么干啊。这怎么还凭空造出个语法来呢?什么东西咱可以往后点啊。你是不是到现在为止只听说过类名点和引用点啊?各位,我还讲过别的点吗?我还讲过别的点儿吗?来,咱们趁此互动一下。佳慧在这说了。我我我们我们是不是只讲过点的语法,是不是只讲过类名点和引用点,有的老师不对呀,我看你c.out.print点的挺爽啊,这个点和这个点好,我问你这个点前面是不是一个类名。对不对,好,那我类名system.out之后,这是个静态变量,静态变量是不是得出的是一个引用,这是不是个引用,这是不是一个对象,是不是采用对象点print LN啊,我不知道大家有没有听过呀,这个东西。啊。
07:00
不是这个system.out system.out点你懂不懂这句话啥意思?完了,我上午讲的时候,我怎么讲的,我怎我怎么讲的啊同学。就这个东西能随便点A5,完了之后点目完了之后点,再往后点,你往后点啥呀,你前面这东西是啥呀,你是个类,你是类名吗。你是一个引用吗?只有类名和引用是不是才可以往后点啊,你前面这个什么也不是啊,你A5.move这个方法执行结束之后的结果是啥呀,是一个呀。你没有返回值啊,你你你按忘吗?是不是没有,不能不能随便来啊,那点开Mo,那怎么可能呢?那啥玩意,这是这这根本就什么也不是啊,这是。啊。懵了,学懵了啊,就彻底懵了,来编译。无法取消引用void啥意思啊,你A5.move这个方法执行结束之后,你是不是一个ID呀,你VO里边有没有这个mouse方法呀。
08:06
你没有啊,这不开玩笑吗?哪有这种语法没有啊,没有没有这种语法,哎呀,我觉得大家这个这个这个同学提这个问题,我我现在有点担心了啊,有点担心,我现在我要正式的再说一下啊,在Java中凡是能点的都都是类名和什么引用,对不对,都是类名和引用啊来有点混乱了啊,有点混乱了啊,就是个别同学有点混乱了。啊,有点混乱了。有点吧,哎,混乱啊,混乱了Java中。只有类名或者引用名引用啊才能去干啥呀,去点。你你明明白吗?什么类名点按什么引用点,哎呀。Out,这个为啥是对象啊,哎哟,我的天呐,这上午没听课呀,这是。
09:05
上午没听课呀,白白白那个啥了,白折腾了我上午。哎,来。咋整?咋整,哎,上午在哪在哪写的。白讲了,妥了,白讲了。又白玩了,又白玩了,来把这个把这个躲开。来看这个。嗯。不是这个哪个是这个吗?啊来看这个,嗯。我上午就是没听明白,没听明白,诶这个能看明白吗。点S理解。静态变量吗?太死他。这不他就类类似于他呀。
10:01
点out不就是个静态变量吗?这个是不是一个静态变量。test.student能不能student好,我问你test.student之后,它是不是一个学生对象,学生对象里边有没有这个exam这个考试方法啊,所以能不能继续往后调exam这个这个方法呀。上午咱不是讲过了吗?怎么能忘这么快呢?太他。点STU,为什么点STU,因为它是个类名啊,那为啥它点s tostu是个静态变量啊,静态变量怎么我们是不是类名点啊。那类名点这你没带括弧,就证明它是一个变量,你能用类名去访问,这说明是个静态变量啊,静态变量点exam呗。点exam为啥能exam啊,因为你exam是这个student对象里边的exam,为什么可以,因为你点student之后是一个什么呀。
11:06
Student。完了,这个代码能不能拆成两行?拆分为两行test.student好,我问你执行结束之后是不是返回一个student?是不是S去掉exam,再好好理解理解test这个类点,STU是不是就是一个学生?用S去调exam考试吗?那你这两行代码能不能合并啊,你合并之后不就这样子了吗?合并啊。不就这个吗?啊,静态变量跟new合在一起,这个还用说吗。
12:02
这个你不用复制,默认值是none啊,你不愿意让他是none的话,你可以拗个对象啊。没有区别呀,这个。之前没有想过将静态变量和new放在,哎呀,同学们,我说一下啊,静态变量它也是个变量,它也是个引用,你这段代码可以写到这,你这段代码也可以写到这里,没有任何问题,它没有区别,就相当于说你这int I,如果你写一个等于100的话,那我这个int I在这能不能写呢?也没问题的,也没有任何你愿意在前面加一个static OK,没问题,那你可以这样写,那我为啥不能采用这样这种写法呀?Student s two new,一个student,这是个静态变量啊。对吧,Test是个类名,然后点STU不就指的是student吗?然后拿到student.exam考试嘛,是不是就考试就完事了,就考试。执行考试来,那这个我就说到这儿,各位啊,我不再多说了啊,不再多说了,那么我们这个程序,刚才咱们的同学问了一个啥问题,还记得吗?
13:05
问题。来c5.move,不是A5点move.catch mouse能这样写吗?A5是谁animal点。你点move这个方法执行结束之后的返回值是什么呀。啊。你不管是K还是啥,你的木方反回是不是个呀?你调一个方法,是不是方法结束之后有一个返回值啊,然后你拿着这个VO,然后在这干啥。Catch mouse,相当相当于你是个VO,你avoid catch mouse没有这种语法呀。这个不能乱来啊,那不能乱写的啊,有规矩啊,有反正我跟大家在一句话。万变不离其宗各位啊,还是那句话,万变不离其宗。只要是想点,那必然是一个类名点或者是引用点,没有别的点啊,只要你想点。
14:05
我这句话可能比较土哈,只要你想点那点前边,点前边要么是一个类名,要么是一个引用。你不可能来胡来啊,胡来好了,这块呢,我中间一个小插曲啊小插曲。
我来说两句