00:01
好了同学们,那么接下来咱们来看一看这个面向对象当中的一个多肽啊,封装继承和多肽,我们终于终于终于讲到一个重点啊呃,特别重要的一个东西,各位我在此呢声明一下啊,这个呢,无论如何你要花费大量的时间去把这个多肽呢搞清楚,那么多肽这块我将分两部分去讲。这样我在这个CHAPTER13这个目录下点击右键,我新建两个目录,一个叫做多态的基础语法,然后呢,讲完多态基础语法之后呢,我们一起来看一看多肽在开发中的作用,多肽在开发中的作用,好吧,我们分两部分去讲,先讲它的基础语法,然后再去讲它的这个在开发中的一个作用啊,我们分两块去讲,各位啊,那么这个多肽说完之后呢,我们前面有一些没有解决掉的一些问题,我们就可以解释了啊,我们就可以解释了,这样这里有很多class文件,我先把它删掉啊,这些class文件对于我们来说是没有用的。
01:00
那么上午呢,我们大量的时间呢,去讲什么,去学习,这个叫做方法的覆盖,或者叫方法的重写,或叫override,或者叫overri,是不是,那么接下来呢,我们下午就来看一看多肽吧,首先先看第一个多肽的基础语法。好,我们来看这个啊,各位集中精力去听啊,多肽基础语法讲完之后,诶,到这里你才知道哦,多肽在开发中有这样的一个作用,是不是,哎,什么样的作用,我们到时候再看,单独写案例去给大家讲一讲多肽在开发中的一个作用啊,那么先去看我们多肽的一个嗯,语法机制吧,来这样先切一下我们叫多肽的。基础语法好,先切过去啊,现在在多肽的基础语法这个目录下,那这样,呃,我们在嗯这个位置上。点击右键啊,我们新建我们的程序,各位看好了,是这样的,我们先写一个animal。Animal啊,我们比较熟悉的一个动物,是不是来我们写一下。然后这个是一个动物类啊,我们是一个副类,然后public class,我们叫animal animal,然后呢,我们这个animal呢,它里边有个方法,我们叫移动的方法啊,还是写这个方法吧各位,我们叫move。
02:16
然后接下来呢,我们这个方法里边呢,给一些默认的实现啊,比如说我们给一个叫做动物在移动是不是好了,那我们的这个负类呢,我们就准备好了,我们还是把架子先搭起来啊,现在呢,我们在这儿呢,有一个什么呀,叫做cat是不是,哎,Cat好了,那么cat呢,就是一个猫啊,猫这个类是吧,然后呢,子类啊,子类来public class,我们叫cat,然后cat呢,这块我们对什么呀,对move方法进行重写啊,对木方法进行重写,或者叫覆盖,那么这个呢,我们建议怎么说呀,把这个代码复制一下是不是,哎,然后拿过来放在这里吧,然后接下来我们这里输出什么呢?我们叫做嗯,猫在走或者cat cat走猫步啊,走猫步好了,那么接下来呢,我们在这里啊,应该再加一个类,假如说这个类呢,我们叫做bird鸟儿,那么接下来我们再把这个。
03:16
打开好,大家看一看啊。呃,这里呢,我们就直接public class,我们叫bird就行了啊,然后呢,哦,我们还有一件事没得做呀,这个忘了继承了,是不是我们继承animal啊,继承animal,然后接下来呢,我们这个呢,也去继承谁啊animal啊,这是一个子类来我们这个呢,叫做鸟儿类啊,鸟儿类啊,这是一个子类啊子类,那么接下来同样这里边也有一个方法啊,假如说我们这个方法呢,叫做木方法,我们拿过来,拿过来之后呢,我们放在这个地方好了,接下来我们这边想叫鸟儿在飞翔啊,我们鸟儿在飞翔好了,那么这样的话,我们的一个。呃,架子就搭完了,首先有一个副类animal,这个animal这个类下呢,有两个子类,一个子类叫cat啊,还有一个子类叫做叫做bird啊,Cat和bird,然后呢,这个是重写方法,对不对?哎,重写父类的什么呀,木方法啊,然后呢,我们的cat也重写了我们的一个目目方法啊,对木方进行重写,然后呢,我们负类当中也有一个move方法。好了,架样子搭完之后呢,我们先来看多肽,诶这块的一个基础语法TEST01。
04:25
好,各位看啊,注意听啊,绷紧你的每一根神经啊,绷紧你的每一根神经,注意听课,集中精力,坚决坚决给他听明白好吧,好,我们一起来看看多肽啊,我们在这里先看一个多肽的基础语法啊。多态的基础语法,好,我们先写个标号一,然后呢,我们把public class,我们叫做TEST01,然后接下来public static。好,大家看看啊,是这样的,首先呢,我们先写一段代码,大家看看这个程序能不能正常执行,好吧,来animal ae new animal是不是cat CE new cat,好,那么还有一个叫bird be new是不是好,扭完之后呢,比如说A1.move,然后呢,c1.M,然后呢,我们再来一个叫做be一点木,好大家看这个程序,我觉得应该是没有任何问题的,对不对?创建对象创调用方法创建对象调方法创建对象调用方法好,我们来看一下。
05:37
Java c编译我们所有的Java程序,Java test Java test1,然后我们去运行走好大家看,呃,那么我们animal这块呢,就是动物在移动喽,Cat走猫步是不是鸟儿在飞翔这个程序呢,很正常是不是?哎,这里呢,说出的一个结果是什么呀?就是我们cat走猫步呗,是不是?然后这里呢,我们输出的结果是鸟儿在飞翔啊是不是?好,我们拿过来放到这儿啊。
06:05
来放到这儿啊好了,那这样的话,我们这个程序之前是讲过的,那这里为什么会输出cat总毛铺,这个是为什么鸟儿在飞翔,原因是我们的子类啊,继承父类之后,将父类方法进行重写,然后这个子类呢,也将我们父类当中的这个方法进行重写,那么我们有一个规矩,有一个规定,上午我们讲了,但凡是我们子类型对象调用方法,一定会执行我们子类当中的方法,因为重写了嘛。是不是哎,重写一定会叫此类当中重写之后的方法啊,复类当中方法就不再掉了,好了,那么接下来呢,来看一看啊。那么我们代码能不能这样写呢?代码可以这样写吗?就是说我们现在呢,哎,我们animal a,我们一个K可以吗。这样做可以吗?
07:01
好,大家思考一下啊,讨论讨论。我们来分析一下,首先,Animal和cat之间有没有继承关系?就第一点啊,分析一下,就代码可以这样写吗?第一点就是分析一下啊,Animal和K之间有继承关系吗?那答案是有的是不是?那第2.animal是啥父类对不对?K是啥子类是不是啊?第二点第三点是什么呢?呃,Cat ISA animal这句话能不能说通?那当然是能,对不对,哎,能。那cat是一个动物啊?对吧?Animal a等于new一个什么呢?Cat,或者说animal a3等于new一个什么呢?Bird。
08:04
行吧,哎,Bird啊bird,然后这个是cat,这是bird,我们编译一下,我们先来看看编译一下好吧,来编译一下啊,Java c的Java编译行,我们发现没有任何语法性错误,那说明我们Java圆中是不是支持这种写法。经过什么呀测试得知什么?得知Java中支持这样的一种语法,或者是一个语法,什么语法?得知Java中支持这样的一个语法,什么语法呀?就是负类型的引用。允许指向什么子类型的对象?就一个父类型的引用,这个AR是负类型的引用,指向了一个子类型的对象,这是允许的啊,那么animal AR等于new cat,其中AR就是一个负类型的引用。啊,New cat是一个什么子类型的什么对象?
09:06
允许什么呀?允许A2这个负类型引用指向子类型的对象,这是允许的啊,这是允许的,那么这种语法我们再来编一下啊,看看测试一下没有任何问题是不是,那么这种语法呢,我说一下啊。它呢,被称为向上转型。向上转型各位啊,被称为向上转型,也就是我们在学多肽之前啊,我们需要先去学习两个啊概念啊,先需要先去学习两个概念。多肽的基础语法第一点,学习多肽基础语法之前,我们需要普及啊两个概念。啊,一个第一个,第二个第一个是向上转型啊,第二个是向下转型,向下转型啊,Java中允许向上转型,也允许向下转型啊,首先这是这样啊,Java中注意啊。
10:12
Java中允许向上转型,也允许向下转型啊,向下转型。那么但是啊,特别需要注意的是什么?无论是向上转型还是向下转型,两种类型之间必须有继承关系,没有继承关系编译器报错啊,没有继承关系编译器报错。啊,编译器报错,首先这件事这个啊,123455颗星明白吗?五颗星你理解吗?五颗星啊,无论是向上转型还是向下转型,两种类型之间必须要有继承关系才能谈这个向上转型和向下转型啊,另外知道Java中允许向上和向下转型的,那么向上转型是什么呢?向上转型是子转到负。
11:14
啊,向下转型是父类型转换成什么呀,哎,子类型。啊类型那什么意思呢。啊,这个强制令转换一会儿再说啊,来我们这边呢,我们把这个画图的一个工具打开啊,首先啊,大家呢,要有这么一个呃想法啊,比如说我们现在呢,在上边啊,我们叫什么叫animal类型。啊,这是一个什么呀,这是一个负类。傅类啊,这些等会儿,等会儿先别着急啊,然后接下来呢,我们啊,还有一个子类型啊,这个子类型我们叫什么叫cat。啊,这是一个什么呀?哎,子类啊,你先别去唠嗑啊,我告诉你,你这会集中精力听我的课啊,听我的课听完之后你再问啊,也许你到时候一个疑问都没有了啊,一个疑问都没有了,那么接下来大家注意啊,呃,K呢,转成什么呢?Animal这个呢,我们我们我们叫做向上转型。
12:12
啊,向上转型。对啊,这叫。上边这叫负。啊,下边这叫子,父在上子在下。明白吧,哎,负在上。子,在下。如果你是子转向父,我们叫做向上转型。向上向上转型啊,然后当然你也有可能把animal转成什么呀,我们的一个cat。啊,那么这个过程呢,我们叫什么呢?我们叫做向下转型,各位啊,这个叫做向下转型。
13:05
下转型啊。那么首先呀,你要了解什么是向上转型,什么是向下转型,向上转型是子转型负,向下转型是父转向子,但是无论是向上还是向下,两种类型之间必须有继承关系,重点啊,大字写大点啊,无论向上还是向下转型。两种类型之间必须要有继承关系,这是首要条件。没有继承关系。就没有向上和向下转型,各位我先把这个啊。粗体,然后颜色变成红色,你知道它的重要性吧?哎,这是关于向上和下下转型啊,来向上和向下转型啊。
14:06
好了,这张图呢,我就关掉了啊,关掉了来我再强调一下啊。有这个一强调一下啊呃,学习呢,我们多肽语法之前需要普及两个概念,一个是向上转型,一个是向下转型。呃,注意Java中允许向上也允许向下,这是第一点啊,第二点是无论是向上还是向下,两种类型之间必须有集成关系,没有集成关系编译器会报错啊,什么意思呢?假如说现在呢,嗯。我们随便啊,在这里再加一个类型。加一个类型啊,这个类型呢,我们假如说呃,写个什么dog吧,Dog啊,我就不让dog继承animal。注意啊,Dog并没有什么呀,什么animal明白吗?Dog啊,不是animal的子类。那么这个时候,如果。
15:03
我在这里写了一个类叫dog,那接下来我在我的程序里边能这样写吗?Animal。分割线啊。没有继承关系的两个类型之间存在转型吗?Animal a4你一个dog,好,我们来编译一下。不兼容的类型,Dog无法转换为animal。为什么?因为它两种类型之间不存在什么呀,哎,任何继承关系啊,任何继承关系,所以这个呢,大家要注意啊,大家要注意这个就是错误的啊,Dog无法转换animal。好,那咱们继续再往下看啊,再往下看,那么这个向上转型其实就是子转向负对不对?哎,其实这个呀,又被称为什么呀,哎,自动类型转换啊,然后呢,负呢转向子呢又被称为什么呀,向下转型,向下转型我们又被称为什么叫强制类型转换,但是我先说一下各位啊,我们在Java源当中引用类型这块的转换啊,我们不叫做自动类型转换,也不叫做强制类型转换,只不过我给大家举一个例子,就是为了让大家好接触一些,所以呢,我们也可以把子转向负呢,叫自动转,负呢转向子我们叫强转,强弱类型转换需要加什么?
16:32
哎,需要加强制类型什么转换符。啊,需要加强制类型转换服,如果是强转的话,但是各位啊,我再次强调一下啊,大家以后在工作过程当中啊,和别的程序员沟通的时候,别说自动类型转换,也别说强制型转换啊,你就说向上转型和向下转型,向上和向下这个是专业的自动类型转换,还有强制转换,这个是说基本数据类型的啊,说引用数据类型这块,你就不能按自动性转换和强制转换这种说法了,我在这里诶,我算是一个注意吧,跟大家说一下啊,就是以后啊在工作过程中啊,和别人聊天的时候。
17:13
啊,要专业一些啊,说说什么呀,说向上转型和向下转型啊,不要说自动类型转换啊,也不要说强制类型转换啊,因为因为自动。类型转换和强制类型转换是是使用在哪啊,是使用在基本数据类型方面的啊,基本数据类型方面的啊,在引用类型转换这里啊,只有什么呀,哎,向上和向下转型啊,向上和向下转型呃,当然你也可以理解成这是一种什么呀?自动类型转换对不对?你说cat自动类型转换成什么呀?自动转换成animal,你说cat是一个。
18:05
是一个什么呀?是一个animal,对呀,Bird,它是鸟,是一个动物啊,哎,也能说得通啊,副类型引用指向一个什么呀?子类型的对象,父类型的引用指向了一个子类型的对象,这个就是向上转型,各位啊,就是向上转型。那么接下来呢,我们再来看一看啊。我们看一看这个程序,各位重点来了各位啊好,我们再编一下,确认一下这个程序没问题啊,没问题来这个放开为什么有问题,这个这个放开,这个放开为什么有问题,因为它俩两种类型之间有没有继承关系,没有继承关系你是不是不能这么干。对不对,哎,没有集中关系不能这么干啊,所以这个不行,你再来你看这个就行了,嗯。是吧,可以了啊,那么接下来我们来调用一下啊,我们调用什么呀?A2的move方法。A2的move方法各位来看好了啊,A2A2啊,点什么move。
19:04
好,各位,这个程序的执行结果是什么?然后我们再调用A3的move,我们调用A3的move方法,你说这两个它的执行结果是什么?a3.move。a2.move。A,三点木同学们,这个输出结果是啥呀?这个输出结果是什么?Ma。鸟。A3是animal a2a三都是animal啊。啊。Animal,它的一个方法不是应该动物在移动吗?
20:00
啊。那这块的结果是什么呢?Animal a等于new cat animal a3等于new bird,那AA2和A3不都animal吗?他不应该是。木马。不应该是这个吗。来我们看一下啊,它的执行结果。编译之后我们运行运行T01,好,大家看动物在移动,Cat走猫步,鸟儿在飞翔,前三个是什么?前三个是不是这个这个和这个呀,那么第四个和第五个,第四个是什么,第五个是什么,第四个是cat走猫步。是不是,然后呢,这边呢,再往下。它是什么?鸟儿在飞翔,也就是说我们这个的输出结果是鸟儿在飞翔,诶它并没有说只向大家想象的对不对,哎,执行的是我们animal当中的什么,哎,Move方法。
21:04
那么有同学就奇怪了,说,诶,老师这个东西有点懵啊,那a2.move的A2的类型不是animal吗?啊,AR的类型不是animal吗?Animal这个东西它不是有move方法来执行这个呀。怎么就执行到子类里边了呢?哎,这就是多肽,这就是多肽,来,我来分析一下各位啊,什么叫多肽。什么是多态,多种形态,多种状态对吧?来我们看一下啊,我们分析一下这个a.movea2.move啊来分析一下啊,分析这个首先Java程序分为什么,分为编译阶段和什么呀?运行阶段啊,我们先来分析编译阶段,各位对于编译器来说啊,对于对于这个编译器来说啊,编译器只知道什么,各位只知道AR的类型是animal啊,所以编译器在检查语法的时候会干什么呀,会去animal dear class自解码。
22:31
查文件中找什么,找我们的目方法明白吗?对于编译器来说,编译器只知道AR它的数据类型,记住啊,编译阶段它不会你有对象的编译器只知道AR的类型是animal,你懂吗?Animal叙式乎,它就去animal的这个类当中找这个木方法,结果找到没有啊,找到有这个方法对不对?你看啊,看我怎么分析各位啊,分析AR的不加入它学们编译和运行分析编译期。对于编译器来说,编译器只知道AR的类型是animal,所以编译器在检查语法的时候会去animal class自己码文件中找木方法,找到了。
23:18
绑定上啊,绑定上,绑定上木方法。编译通过啊,静态绑定成功,我们叫静态绑定啊,编译阶段是属于静态绑定,注意啊。编译阶段属于静态绑定。啊,那么再来什么呢?再来分析运行阶段。注意听课各位啊,编译期和运行期不一样,来运行阶段的时候,实际上在堆内存中创建的Java对象是什么?
24:04
是K对象。所以move的时候。真正参与木的对象是一只猫。所以,所以。运行阶段会动态执行。K对象的什么move方法啊,这个过程叫运行其绑定啊,这个过程属于运行阶段绑定。啊,叫做什么呀?哎,运行阶段绑定属于动态绑定啊,动态绑定那么何来何来多态呢?多态表示多种形态,编译一种形态,编译的时候一种形态,运行的时候是另一种形态,因此得名叫多肽,各位啊,因此得名叫多肽,这就是多肽,这就是多肽啊,多肽实际上指的就是什么呀?负类型的一个引用指向了子类型对象程序分编译阶段和运行期,编译阶段只知道AR的类型是animal,所以从animal里边去干啥?找我们的目方法找到了,绑定成功了,那么接下来就是编译通过了,编译通过就开始运行了,运行的时候等号右边会把对象扭出来那。
25:45
那真正你animal动物在移动的时候,大家想一想,是你动物在移动,还是说底层一个对象在移动,实际上是你底层的Java对象在移动,明白吗?在移动啊,所以运行的时候就它就会动态的调用到我们底层你是什么对象,那就是什么对象在移动,你比如说你是cat,那就是cat在移动,如果你是一个什么呀,叫做bird,那就是bird在移动,那总之真正负责最后移动,你想想在世在现实世界当中,真正负责运动的是啥?是不是那个对象啊。
26:16
负责移动的是不是那个对象啊,那个对象移动对吧。哎,就是这样的各位啊,这就是多肽,这是多肽啊,多肽其实指的就是负类型引用指向子类性对象,多肽指的是负类型引用指向子类行对象,包括编译阶段和运行阶段编译阶段。啊,编译阶段。绑定的是什么?编辑段绑定负类中的方法。运行阶段动态绑定什么呀,子类型。
27:00
对象的方法,两种形态或者多种形态啊,叫多态,各位啊,还是那句话,各位有同学说老师你讲到现在我是理解了,我听能听明白,但是有啥用啊,你这么写有啥用啊,同学你别忘了,我讲完多肽基础语法,我必然会给你讲多肽在开发中有什么作用,现在我还没有讲到这个多肽在开发中有什么作用,我只是给大家讲一讲多肽的基础语法,好吧,所以你不要心急,你不要紧张啊,一会儿诶,我们慢慢慢慢就知道哦,多态的设计真是太巧妙了,真是太巧妙了啊,非常棒,来我们这个程序再来编译一下,我们再去运行一下,大家看看结果是不是K在走猫步,然后我的鸟儿在飞翔对不对,哎,这两个就输出了啊就输出了好了,那么接下来呢,我们一起来看一看。嗯,这个多肽的第一个基础语法啊,我就给大家解释完了,这里我再强调一下吧啊,有向上转型,有向下转型,向上转型自动类转换,向下转型叫强制进行转换,强制类型转换,然后呢,需要加什么呀?强制类型转换符啊转换符然后呢,这块多肽呢,我给大家解释完了啊解释了一下。
我来说两句