00:00
好,看一下我们今天呢,留到这五道问题,哎这五道问题哎,今天的话呢,咱们把这个面向对象呢,这个第五章呢,就能结了,就能结了,看一下这这个这个涉及到我们昨天讲过的这样的一些内容,第一个这个多态性,多态性呢是咱们讲面向对象的三大特征之一,这个呢,相对来讲也是最难理解的一个,但是大家呢,先从这个知识层面,就是一方面啊,就是想着去理解它,另外一方面呢,你这个代码涉及到的代码呢是什么,该会写的还得会写,理解的话呢,可以慢一点,但是代码的话呢,你得先会写得属于这种了,就像大家一开始第一天写这个hello word一样,你可能呢,也不是特别理解为什么要写一个public static word,你也不知道里边每一个关键字或者每个单词是什么意思,但是呢,先会写,先能出来一个hello word,包括s off也得会写,后边呢,慢慢的我们去谈里边的每一个结构是什么意思啊,那这也是一样,多态性这块呢,相对来讲难理解一点,但是需要点时间。
01:00
包括呢,大家见到这个代码量呢,还比较小啊,需要点时间,但是呢,涉及到这个代码是是长什么样子的,这个你先会写,后边呢理解的事儿慢慢来,那这里边呢,需要大家会写的呢,也就相当于体现这里边儿这两个事情。这两个事情,那第一个呢,叫什么是多态性,就是说什么是封装性,什么是继承性,哎这样的一个问题一样,那什么是多代性,这个怎么写,大家都。怎么写啊,这就叫就是咱们Java当中这个多态性呢,叫做对象的多态性。对象的多态性,就是我们左边呢声明一个变量,咱们昨天举例子,拿person来说的,左边呢声明一个变量,这主要是针对咱们这个类类型的,然后右边的话呢,我们去附一个值了,这时候呢得给它new一个对象了,这时候这个new的对象体现为叫多种形态的,你可以去new用它的任何一个person类的子类的对象,对这呢就叫做这个你右边这个对象体现的是多种形态,所以叫对象的多态性,就是这个意思,写欢它就算对了,你要是再解释一下呢,那就更好了。什么叫对象的多态性呢?
02:20
叫父类的引用指向子类的对象,这个反着说也行,叫子类的对象赋给父类的引用,子类的对象父给父类的引用啊,父类引用指向子类对象,这样都可以,但是别整反了,别说那个呃子这个这个子类的引用指向负类的对象,那就坏事了,这就不是这样犯,注意这是就是我们说的这个多态性的事儿,这个什么是虚拟方法调用呢?什么是虚拟方法调用啊,对,就是你要说最简单的话,那就是编译时看左边,运行时候看右边,这是不能再简单了,那具体展开一点,展开一点来说的话呢,就是当我们像我这举个例子啊,说当我们通过这个变量名去调用子父类当中同名同参数的方法时,编译的时候呢,我认为你调用的这个方法呢,是父类中声明的这个方法啊,然后当我们真正解释运行的时候呢,我们实际执行的是子类重写的这个方法,这呢就叫做虚拟方法调用。
03:36
那最简单的话呢,就咱们刚才说的,就关于调用方法这块调用方法时。我们叫编译时看左边,运行时看右边,这个多态性呢,只针针对于咱们说的方法是有效的,那对谁是没效的属性,对这个属性这个事呢,就不用说了,咱们一说都态性出的都是方法属性的话呢,我们体现为什么样的特点,编译运行都看左边,嗯,就这个意思,一会咱们复习的时候呢,再来说一下,就这呢是咱们落地的多态性代码上的体现,最核心的就两块,第一个你得知道什么是多态性代码上的体现是什么样子,第二个就是我们真正调方法的时候呢,这个虚拟方法调用是怎么回事。
04:27
这两个事呢,大家就是关于多态性,后边我们说的一些好处啊等等,你可以先不理解,但是呢,涉及到代码层面呢,这两个事儿大家一定要清楚,先会写代码,理解的事呢,慢慢来,这样下一个问题,一个类可以有几个负类啊,对这个其实说的稍微有点含糊啊,应该要几个直接负类对吧?直接负类呢,只能只有一个吧,只有一个,这就跟咱们这个人类社会是一样的,你就想只能有一个坝就就就OK了,你这个干坝的那种都不算这个咱们说的是血缘上的这个这个棒是吧?这个一个父类呢,可以有多少个子类呢?多个吧,就是我们一个类呢,可以被多个子类所继承,这是没有问题的,那子类呢,能获取直接父类的父类中的结构吗?
05:25
可以的,就是我们这个呢,直接负类的负类都称作叫间接负类了,也是它的负类,也是它的负类。就是关于继承这块的话呢,就是子负类,我们平时呢,大家去写的时候说我这有一个类A,然后呢,哎,我这有个类A,然后呢,这块有个类B,说我该不该让这个类A去继承于类B呢?咱们说呢,你不要为了继承而继承,就咱们说一个狗,你不能让他狗去继承于人,对吧,你不能说仅仅是为了让这个狗呢,获取人这个某一些特有的一些方法啊,说我就让狗去继承人了,这个不合适,那通常的话呢,大家在开发中呢,有一个小的技巧,你就判断一下,说a is b这个事儿的话呢,你先你判断一下他是不是个true,他要是个true的话呢,你就可以让他去做一个继承,是个true可以比如说student啊,Is啊ISA吧。
06:20
Student呢,ISA person,学生呢是一个人,或者要是一种人,这对的,那你就可以让这个student呢去继承为我们的person,说狗是一种人,不对,那你就不要让这个狗呢去继承于人,说这个储蓄卡是一种银行卡,说saving account ISA account,对啊,那就可以考虑去继承,有这样的一个情况啊,大家可以呢,作为你去判断说是不是该继承或是不是能继承这样的一个小技巧。下边说此类呢,能否获取负类当中private权限的属性或方法,这个一定要明确说是可以的,这个绝对是可以的,让你证明会吧,怎么证明,对所有的属性,我们去提供了盖S方法,你是不是照样可以获取和修改啊啊,然后这个私有的方法的话呢,你如果放到一个公共的方法里,我去调那个公共的方法,是不是顺便呢,把那个私有方法就也掉了,对,这都是这个证明,这个事呢,大家要明确,就是封装性解决的是能不能调的问题,是你这些权限控制的,然后我们这个继承性呢,解决的是能不能获取的问题,所以呢,他俩不矛盾,我该获取还获取,不能调呢,那是不能调的事儿,是另外一个问题了,是封装性的事儿,行,这个呢,大家清楚下面一个方法的重写的具体规则有哪些,这个咱们昨天讲的还挺细致的,也确实呢要。
07:53
讲讲清楚这个事儿的话呢,那就得是这样比较细致的来讲啊。再找个同学来说一说重写这个规则,这好几条呢啊,你看自己写的话呢,有没有写全了。
08:11
看王洪志吧,嗯,你说一说这个重写具体的规则有什么呀。啊是啊,此类此类重写的方法和那个类重写方法什么那个呃形态列表都一样,呃形列表一样啊,然后是子类的权限修饰权限符,然后不能小于负类的那个权限,对,就是此类的权限修复,它不小于负类,这个权限修复就可以变得大一些,对吧?嗯,这是这块的问题类类。那个方法的返回值,然后不能大于负类的,不能大于负类的这个返回值类型这个距离展开的话呢,又比较细了,就是有好几种情况是吧,比如说这个负类中,人家那个是个VO子类,怎么着啊,也得VO啊,那如果负类中这个返回值类型是一个基本数据类型类基本,而且只能跟你一样,对啊,那然后不是这种情况的话,你是个引用类型的,比如说是个类啊,是个呃就就是一个类了啊,然后我们的子类的话呢,可以跟你一样,也可以是你的一个子类,对吧?诶对啊,行,接着。
09:30
啊,然后是子类重现方法,然后爆出的异常类型不能大于负类,诶对,关于这个异常抛出的异常,抛出来异常的话呢,这个子类呢,这个异常类型可以再小一点。可以跟它一样,也可以再小一点,对吧,嗯,那这个这个前面丢了一个,前天列表一样,还有一个哪个一样发名给丢了,这是这最重要的是吧?哎,这个也得一样行,那基本上啊,就我们说的这样的几个点,嗯,然后后边的话呢,我们提了一个关于static这个事儿,大家呢,其实暂时呢就可以先不考虑这个事了,就是static的话呢,就是只要用static修饰的,这就不涉及到重写的问题了,重写的话呢,必须是非static的,Static的话呢,这就是随着类的加载而加载,它不会被这个子类去覆盖掉的,所以说呢,它不涉及到这个重写的问题,这呢就是我们说这个方法的重写的具体的一些规则,大家呢,还是需要记住的,那么额外的再问一个问题,那就是开发当中咱们呢,确实经常的进行重写,那平时开发中重写都怎么做呀,直接就把负类那个方法声明,直接CTRLC一下过来,或者你在我们此类当中直接通过那个提示对快页提示去做。就是说虽然我。
10:45
我们提到说这个可以这个更大啊,这个呢不能太大,这个可以变小啊,这个呢,这个可以使它的子类,虽然说的这么细,但是实际开发的时候呢,我们都跟负类中的基本上都是一样的,所以直接呢,你把傅雷那个生命拿过来就开始重写,一点问题没有,这是咱们真正开发中都这样做,这个大家注意一下就可以了。下一个说修克呢,叫调用构造器有哪些啊,需要注意的点,关于调构造器这块。
11:14
这块呢,我我我在这块再说一下吧,这个咱们一会儿复习的时候也会提到这个,如果这次大家能整清楚的话呢,这个super呢,其实理解起来呢,就会更好一些,咱们这次呢,讲到说可以使用叫行参列表的方式呢,去调,这个调的呢叫本类重载的其他的构造器,尤其要注意其他的得加上不能自已调自己了,那这个呢,你要是知道以后呢,只不过呢,就换成这个修复而已,也是叫行参列表,一个呢是调你自己的构造器,那我这儿呢,就是调用副类的,副类中指定的构造器,这个指定呢,就是通过你的这个形态列表,对,然后呢,指定你调的是哪一个了,就是你你调的这个我写了一个string型的一个变量了,那你负类中一定得有那个是string那个型的变量,呃,这个构造器才可以。
12:14
就这呢,就是调负类构造器了,呃,所以这个事儿的话呢,其实如果简单来说的话,那就是这次呢,你调是本类的构造器,我这呢调的是负类的没了,只是说具体我们在关于这个super使用的时候呢,又提到几个细节的点。有这样的几句话,大家看一看啊,第一个super呢,要写只能写第一行啊,只能写到第一行,他也得写第一行,这次也要写第一行,我们说在一个类当中,构造器的首行,那你这次和super呢,只能二选一。而且必须二选一,你想对吧,我刚才说只能二选一的意思,就是说它俩中你不能都选的意思,那必须二选一呢,就是说你不能有别的选项了。
13:03
不能有别的选项,也就是说构造器的首行不是这次形态列表,就是super形态列表,只可能是这俩当中的一个,这个具体的咱们昨天都说过了,那接下来呢,就是如果我们在一个构造器的首行,我既没有显示的写这次形态列表,也没有显示的写super形单列表,对这个默认行为大家一定要清楚,默认呢就是super空餐啊,Super空餐,然后呢,后边最后还说了一点,说我们在一个类中啊,如果有N个构造器。啊,说最多呢,咱们当时讲说有N减一个呢,用了Z次了,那你那个最多N减一个,那还剩一个,对,那我们就说的至少有一个呢,你得是用的super,使用的super,那由这个拓展开,我们相当于又可以说一个子类对象实例化全过程当中涉及到一个事儿,说呀,我们造一个类的对象,这个类的话呢,除了那个object之外啊,先不提object,除了它之外的哪个类都可以,我们造一个类的对象,说呀,一定会加载它负类,以及它负类的负类,一直到object当中,这个类中的这些结构的,对吧?也就是说呢,我们在造一个子类对象的时候,我们一定会调用它副类,或者就是它所有副类吧的构造器的。
14:29
对吧。诶是这样子的,这就我们说的这个子类对象实例化的全过程,咱们昨天呢也这个,那不有两个图嘛,来体会一下这个事儿,行,正因为呢,是我们加载了它的所有的父类当中这个结构,所以说呢,我们才能够体现出叫继承性。你说我在这个队里边儿有这个副类中的某一个属性,凭啥有啊,就是因为你加载过负类的那个结构,所以呢,你才有啊,是这样子的。好哟,这个下边这个变成这样了啊,这个下边一这个题的话呢,其实其实是咱们昨天讲的这个课后题,课后题的话呢,把这个find area呢,就是给大家也补充上了,我们对负类中的这个find area呢进行了一个重写,那重写的话呢,圆当中是计算面积,我这呢就计算表面积了,这里边呢,如果我们find的volume求体积,你还想去用一下负类中这个底面积,再去乘以这个高的话呢,在这里边用那个super,对,所以这道题的话呢,我就不咱们再具体的去写了,这个题的话呢,大家当成使用this次super重写继承这块的一个标准的题目,一个标准的题目适合呢,大家下来呢,拿这个题目呢,把这几个点呢都练一练,你知道这个super s重写继承到开发中,到底它是咋用的,就是这是一个标准的题,下来呢练一练。
15:51
好,这呢,就是咱们今天考的这样的几道问题。
我来说两句