00:01
嗯,好了,同学们,那咱们接下来就来看一看咱们这个。呃,直接啊,咱们来看一下这个多肽的一个作用啊,因为昨天呢,我们讲的是多肽是吧。啊,这块也可以简单的做一个回顾啊,这个多肽。呃,然后呢,咱们就以咱们的作业题为例,去讲这个多彩的作用啊,昨天我正好布置两个作业题嘛,第二个题不是有一个宠物嘛,和主人是不是,呃,那个呢,我到时候呢,我就以这个为例啊,去给大家讲一讲多肽它的一个在开发中的一个作用,好吧,哎,开发中的作用啊,呃,那行,那这块的话,咱们这个把这个嗯打开啊,打开之后呢,我们这边啊。呃,把这个对17的一个课堂笔记打开啊,继承呢,我就不再说了这块啊,然后呢,再往下这个呢,我也不再说了,方法覆盖呢我也不说了这个啊,不回顾了,主要的是说一下多肽这块啊,多肽这块呢,我再把这个写一写吧,首先呢。有一个向上转型和向下转型的概念,是不是,哎,这个向上转型是什么呀。
01:05
向上转型其实就是子子类型转型转向什么呀?哎,负类型是不是,哎子类型转向负类型啊,那么向下这个转型呢?向下转型就是这个负转转成什么呀?哎转成我们的子类型是不是?哎那么向上转型又被叫做什么呀?哎又被称为什么呢?又被称为自动类型什么?哎转换是不是哎,例如animal啊,比如animal是不是A等于new一个什么呀?哎或者是哎,New个cat对不对,那这个呢,就属于什么呀,自动类型转换。是不是我们的子嘛,转成父嘛,是不是猫啊,是一个动物呗,猫是一个动,有道理啊,有道理。来,那么向下转型又被称为什么呢?哎,强制类型来转换啊,强制类型转换。那么强制类型转换呢,这个呢,呃。什么时候用啊,比如现在啊,我。
02:04
在这个位置上代码上怎么写对吧?A,它的类型什么类型啊,Animal类型是不是,但是呢,我想调那个cat对吧,这个类当中的一个特有的方法。这个方法在这个。是不是,那这个时候你就需要做强制类型转换,或者叫向下转型,是不是,哎,向下转型,那么用一个cat c变量去接收一下。这个叫线上转型啊,向上转型的英语单词,大家了解一下uping啊uping,然后你在一些参考书籍上啊,外文外文的一些书籍上,你可能会看见这些这些单词啊,就是upcasting,当casting啊,当casting,当casting是向下转型,Upcasting是向上转型,线下转型,子转成负,负在上,子在下,子转成负,叫上向上,向下转,向下转型是负转成子啊,这叫强制类型转换,需要加强制类型转换啊,需要添加强制类型转换符。
03:07
另外要注意。咱们这个。向下转型就是写到这儿吧,不管啊是向上转型还是向下转型。首先首先啊,他们之间必须有什么呀,还记得吗?同学们来互动一下,打个字来,就是不管是向上转型还是向上转型,首先他们之间必须得有什么,然后我们编译才能通过。首先要有什么呀,哎,复制一下啊。首先有诶宇阳的啊继承,首先他们之间必须有继承关系,是不是哎,必须有继承关系,这样编译器就不会什么呀,报错啊,最起码是这样啊,最起码是这样的,你没有继承关系呢,你就会编译报错啊,编译报错好了,那么这是一个大前提啊,希望大家都能记住啊,都能记住那什么时候需要做线下转型啊。
04:08
什么时候需要向下转型啊?啊,什么时候需要线上转型,各位。调用啊,需要调用或者执行子类对象中特有的方法。啊,必须进行向下转型才可以调用,对吧,就是你这个方法是此类型中特有的,如果你是父类当中有的一个方法,我觉得就无所谓了。啊,如果子类重写,那就调子类重写的,如果子类没有重写,那就调父类的。是不是?哎,如果是,你要是调子类中特有的方法,那就必须得做强制类型转换,或者叫向下转型,那么向下转型有没有风险呀?向下转型有风险吗?
05:05
容易出现什么呀,出现异常,出现这个class,哎,叫cast exception啊,这个类型转换异常是不是,哎类型转换异常。对吧,诶怎么避免这个风险呀。还记不记得有一个叫instance of运算符,是不是可以在程序运行阶段动态的判断哎,某个引用指向的对象是否为某一种类型?啊,某一种类型,所以说养成好习惯啊,养成好习惯啊,向下转型之前一定要使用什么呀,Instance of运算符进行判断判断。
06:02
好了,那么这个呢,其实就是关于向上转型和向下转型的一些概念啊,转型向上型的概念,这个很重要各位啊很重要,嗯,很重要,等于new cat啊然后这块呢,其实你就可以直接怎么着啊,调用A的某某方法是不是,哎,你可以写代码,当时当时怎么说的呀,编译的时候绑定什么的呀,对吧,运行的时候是哪个对象啊对不对,他怎么回事啊,哎,这就是我们下面提到的什么呀,多态,那什么是多态呢?就是多种形态,多种状态啊,多种形态多种状态啊编译和运行。啊呃,有两个什么呀,不同的状态。编译期叫做静态绑定啊,运行期叫做什么呢?哎,叫做动态绑定啊,一个是静态绑定,一个是动态绑定啊,你比如说animal ane一个cat。
07:10
然后呢,我们在这里的a.move那么这行代码它的含义是什么意思呢?就表示编译的时候对吧,编译器发现什么呀,A的类型是。所以编译器会去找哪儿啊?会去animal类中找方法。找到了绑定对吧,找到了绑定编译通过,但是运行的时候和底层堆内存当中的什么,哎对象有关。明白吧,啊,但是运行的时候和底层堆内存当中的实际对象有关。啊,真正调用的时候,真正执行的时候,会自动调用堆内存中真实对象的相关方法啊,真实对象的相关方法。
08:19
啊,所以这个呢,我们就叫什么呀,多肽啊多肽。多肽的典型代码是什么呀?是父类型的什么?引用指向子类型的对象,明白明白,把这句话记住啊,负类型的引用指向此类型的对象,允许Java中允许这种语法,Java中允许这样写代码。明白吧,就允许这么做,负类型的一个引用,你可以指向一个什么呀,子类型的对象。啊,子类型,这这就是这个散公司的这帮人对吧,他们规定的,他允许一个负类型的引用指向一个子类型的,因为他觉得在现实的世界当中,这也能说得通。
09:04
对吧?哎,也能说得通,为什么你说猫是一个洞,这有道理啊,是不是?哎,也能说得通,所以呢,它允许这种语法的出现啊,允许这种语法的出现,但是呢。大家注意,如果说Java语言是你开发的,也许你是不同意这种语法的。也许你你在开发Java语言的时候,你可能说,诶,这个地方不能写anymore啊,必须得写cat。咱说到底呢,怎么说呀。怎么说呢,这个S公司啊,这个语言毕竟是人开发的。毕竟是散公司的软件架构师开发的。对吧,咱们现在学的东西是在人家的思想基础之上进行学习的。他呢定义的这个东西啊。你说有同学说老师为什么负类型的一个引用指型可以指向子类向对象,那这个我还真是没法给你解释,我只能这么说,我只能说猫可以说是一个动物对吧?散呢,它的代码允许这么写,咱们就可以这么写啊,它要不允许呢,你看就不能这么写。
10:01
啊,这个时候引用A是不是调用不了负类特独有的方法。负类独有的方法,负类独有的方法,你这个说法错误,负类没有独有的方法。没有独有方法。文杰父类没有独有的方法。因为复类的方法都会被继承。因为复利的方法都会被继承。啊,负类没有特有的方法,没有独有的,它只要有的话,他给这个子类型都继承了啊,所以说这是一环扣一环连环的啊,连环的什么时候必须向下转型呢?我在这再写上啊,调用此类对象上特有的方法是。啊,行吧,这个呢,我们就简单回顾到这儿啊,这是关于多肽的一个基础语法。
我来说两句