00:00
好,那么这个完了以后呢,我们接下来呢,说一下这个叫方法的重写,注意叫重写啊,以前呢,我们那个叫重载是吧。诶重写呢,它也有个英文叫over。呃,写的话呢,叫RI,哎,所以呢叫overri是可以的,它其实还有一个词啊。Override。Red read。一般叫red是吧,好,这两个呢都叫做重写啊,重载呢是overload。对整清楚啊,哎,那这里边儿就涉及到一个问题啊,说为什么需要方法呢,重写呢。哎,那首先呢,你得知道什么叫方案重写是吧?诶这块我们还是相当于说这个场景哈,这个场景呢,是什么意思呢?诶这里边就涉及到一个点哈,就是我们这个子,哎首先呢,有这个父类,哎这呢是这个子类,子类的话呢,我们说呢,可以继承诶父类中的这个属性和方法了,这块呢,我们只针对于方法来做说明。方法这块的话呢,父类有个方法子类这块呢,哎,继承以后呢,相当于我画个虚线啊,是不是直接自己也有了。
01:01
你那就可以呢,在权限允许的情况下呢,就调用了。但是呢,有时候你会发现呢,说父类的这个方法呢,子类这块呢,呃,你说有这个功能吧,也得有,但是这个功能呢,似乎呢,就不太适合于这个子类。啊,那么这个时候呢,我们就考虑做这个冲洗。啊,举个例子,比如我在这课件里边也有啊。哎,这个例子是这样的,我们这有个类呢,叫phone手机啊,手机呢可以发短信打电话啊,可以显示来电号码。啊,像打电话,这就属于这个1G的这种场景是吧。呃,二级的场景呢,就是你能够发这个短信了。三技能。可以发彩信了是吧,对,然后4G呢。诶可以这种视频了,诶像大家呢,说这个抖音啊,这个这个快手啊是吧,像这个都属于4G的这种场景下的这种主要的应用载体,你说怎么五年前十年前我这个怎么没有抖音呢?以前那个网也不行是吧,支持不了啊啊那么5G的场景的话呢,这个就更丰富了。
02:02
诶,5G的场景目前在我们看的话呢,基本能够满足人的各种需求了,是吧,像这种无人驾驶啊,包括这种以后呢,我们讲的VRAR啊。哎,在5G的场景下呢,是都可以满足的哈。啊,当然这个你说6G现在据说都在研发了,它是什么场景呢?这咱就作为普通人咱就不知道了。对啊,实际上呢,我们说呢,在这种顶级的科技公司里边,目前呢,咱们说叫信息化社会是吧,诶顶级这种科技公司里边,其实它都养着一批人是吧。就是它得具有前瞻性。对啊,那你像我原来我在读研的时候呢,诶,我们给那个我在那个国家重点实验室里边啊,跟那个微软当时做的项目就比较多一些啊,跟微软研究院就在北京的那个丹棱街上的啊。就是我们当时过去确实那里边儿工作环境还是挺好的啊,他这个从二楼起这个成员呢,都是呃,一个就是这个大走廊吧。啊,这个就去了啊,就是你上二楼以后呢,这个是一个大走廊,走廊这块呢,这边呢,就整个它是一个,就是你能看到大厅了啊,这边就一个一个的小屋是吧?这个小屋一进去的话呢,它是有四个工位哈,这边有俩,这边有俩。
03:08
然后这块呢,还有阳台啊。对,这边都有阳台,所以呢就环境比较好,然后每个成员的话呢,就两个大的屏幕嘛。啊,然后自己一个笔记本是吧,啊就在这块做开发,然后呢,你可以几个人呢,去装饰一下你这个办公室整单就特别有特色啊,它属于这个微软研究院了啊,诶在这里边儿呢,其实呃,具体那时候说是哪一层来着,它是有一批的,这个咱说呢,具备这种前瞻性的一些人啊,就是科技公司开发一款产品呢,它是需要周期的。对吧,或者咱们说以前哈,在这个微软的历史上呢,大家不知道听说过没有。叉P这个系统是吧,对,这个系统是极其经典的哈,用了很多年,后来呢,就是这个被迫啊,微软呢就把它给下架了,要不总有人不更新最新的操作系统。对你看啊,这个系统的话呢,它从它开始立项,诶到它开发出来这个呢,大概得有一个怎么这个比如说三到四年的那个周期,你不能开发出来以后呢,这时候呢,就有点儿过时了。
04:07
这时候应该还是要稍微有点这种超前性的是吧,大概你比如说两到三年的时候呢,达到它应该具备的那个场景了。呃,然后呢,你再稍微的往后延续几年这块这个周期的话呢,其实保底的话得有五六年的时间了。呃,五六年以后的话呢,这个可能还能再连续的用一用。啊,这个升升级等等的,然后哎,差不多呢,就到他这个该退伍的这个时候了。诶,但是这个差P呢,因为它极其经典,往后又延续了好多年,你这样一算,从他开始立项开始,到他这个最后呢,他这个结束生命周期你看中间跨度是。很长的是吧,那就需要呢,这些人,咱们作为普通人呢,你可能还处在这块的哈,啊,或者你在这块的,你才接触到这个差P你觉得诶还行挺好用,其实呢,他在很多年前呢,就已经在筹划这个事儿了,所以必须要具备这种前瞻性是吧。那现在我们5G还没铺开呢,那6G呢,其实必须要开始做研发了是吧。OK哈。
05:00
所以这样去讲的话呢,其实咱们所谓的像抖音啊等等这些公司,它只是迎合了当前的这种场景而已。最厉害的公司呢,其实是做标准的是吧?对啊,你就像现在这个苹果,你说特别牛苹果呢,顶多算二层叫做品牌的。啊,你再牛,欧洲现在说了,必须要用Type C。那就得乖乖的,就得用Type C是吧,哎,因为人家是说标准的。啊OK啊哎,三流的话呢,是做产品的是吧。哎,就是富士康帮人家代工的是吧,诶富士康自己说我也整一个跟iPhone一样的,一模一样的,我便宜一半,不好意思没人买。是吧?哎,这就是品牌的力量啊。好,这个咱们拉回来啊,现在呢,我在这个缝里面呢,定义了一个方法啊,这个呢叫show number,叫显示的来电号码。以前这个手机呢,就比较,呃,这个叫什么简单了哈,呃,甚至有一液晶屏呢,就都都就这窄六啊,诶谁来打电话了,这块一看是这个号码了,现在话呢,我们用的都是智能机啊,全是这个大屏了,这块呢,你这么大个屏幕,光显个电话号码呢,就显得有点low了。
06:03
你还可以呢,这里边儿去设置它的这个来电的头像啊啊等等啊是吧,诶这块呢就可以非常的丰富了,那么如果说phone呢,是一个副类的话,诶我们这个智能机呢,去继承于这个副类,那么对于这个方法的话,我们就可以考虑做一个功能的拓展了。也就是说呢,这个方法呢,就不太适合于我们这个子类了。这个倒不是说呢,父类中,诶这个方法子类呢,没有啊都有啊,只不过呢,同样的功能呢,我就想给你重新再写一遍是吧,这个我们把哎此类当中,哎对负类中的这个方法,哎,想重新的去再。写一遍啊,作为一个覆盖的行为,我们就称为呢,叫方法的重写。啊,其实比较好理解啊,这个说一下,为什么说呢,这个哎子类在继承父类以后是吧,哎就获取了。哎,负类中。哎,声明的,哎所有的这个方法了,哎,但是呢,哎这个子类啊,这个父类啊中的这个方法。
07:03
啊,可能不太适用于子类。啊,换句话说。哎,换句话说呢,这个,哎此类呢,需要对。哎,负类中的。哎,负类中啊。呃,继承过来的这个方法呢,进行一个覆盖,诶或者叫诶复写的操作。哎,那么这个时候呢,我们就需要用到方法冲洗,而这里边呢,什么叫方法冲洗呢,就是哎子类。哎,对。诶,父类,呃,继承过来的这个方法进行的覆盖,或者呢,叫做复写的这个操作,哎,就称为。哎,这个方法的重写。诶方法的这个诶重写啊,因为呢,我在这个概念当中,尽量就不要出现这个字儿了,是吧,所以呢,我这呢,就换了一个词儿啊,叫做覆盖或者叫复写这种行为就叫做重写啊,那咱们其实呢这块呢,还可以基于刚才说那个凤啊再举个例子,你比如说我们对于正常来讲啊,咱们也写过这个叫账户的这样的一个,呃,相关的这个题目了,它呢叫做这个账户啊,账户里边呢,它就有诶比如double型的。
08:16
啊,大型呢,叫做balance。啊,这个我们称为它叫余额。好,那么针对这个余额的话呢,咱们可以呢,去写这个叫with的这个方法。这个我们叫取钱的方法。哎,你想取多少大模型的,比如叫AMT。好,这个呢,就是我们叫哎取钱。哎,他这样的方法啊,那么这个方法里边呢,具体这个方法体我就不写了啊,哎,我们需要呢,去判断你这个balance是吧。呃,这个所谓的余额哈,呃是否够,哎,咱们AMT这个钱。哎,然后够你就取,不够就不取了。啊,这个取钱额度是吧。好,这个呢,就是我们说这个account了,诶那么实际呢,咱们都知道,呃,在银行当中啊,我们说办一个账户,这个账户其实有点抽象了哈,具体我们办的可能是一个,比如说储蓄卡呀,信用卡呀,这个我们都可以呢,诶指定为是咱们这个account的这个此类了。
09:16
比如这里边儿呢,我就用这个叫check account表达的,这个叫信用卡啊。好,那么这个信用卡的话呢,首先它也可以往里存钱。所以说呢,我们这个信用卡的话呢,继承一个account也有一个这样的额度啊,那么信用卡的特别之处呢。他是不是可以透支啊?哎,对,这个呢,我们就称为呢,比如叫,嗯,我叫这个吧,嗯,叫。TED。快吧,啊就是这个呢,我们就表示这个叫诶透支额度。啊,用它啊。透支。额度啊。好诶,就是用他的这个变量呢,比如我们来进行这个表示的,呃,那么我们对于信用卡来讲,我也可以去取钱。这个取现功能,如果你要是直接拿到负类的这个方法,那你这块取也只能是还从余额里取。
10:05
那这个呢,根本就没用上是吧。哎,那怎么办呢?哎,我们就需要呢,对这个方法是不是进行一个重写了。诶,我就把它那CTRLC啊,原封不动的我就拿过来了,诶拿过来以后啊,这里边儿我们就需要呢,哎在具体呢,其实这个重启的话,咱们重点呢,其实就是起的是这个方法体了。对的啊,所以这时候这个方法体呢,我们说判断balance这个余额是否够这个取款的额,取钱的这个额度哈来说诶这就是如果要不够是吧。哎,还可以考虑从这个。诶,Protect buy这个额度里边呢去取。啊,额度里啊去。行,这个呢,就是我们实际当中的这样一个场景,那么我们把这个方法对这个方法的这种覆盖行为,哎,就称为呢,叫重写。哎,既然我就要覆盖了啊,那就意味着呢,就是如果我们下边呢,去写一个呃,测试的话啊。哎,比如在这里边啊,我们简单就写一下啊static。
11:03
写个may。哎,好久没写,没方法了是吧。嗯。好在这里边啊,好这块呢,我首先呢,去创建一个这个叫check count它的一个实例啊。哎,那我创建完以后呢,我通过它呢,去调这个叫呃位置照啊。当然我目前呢,还没有去给他这个这个附相关的这个值啊。哎,当然这块我们主要关心的就是此时这个方法我调调的到底是谁的。诶,我拿的此类的对象是不是掉了,诶这块我们说掉了,就是你此类覆盖负类的这个方法。说白了就是掉的是他啊。诶,如果掉的不是他的话,那不就写他没意义了吗。哎,所以这个呢,重写的意思呢,你可以就理解成我们生活当中,我直接拿这个方法就给你覆盖掉了。哎,你就目前来看呢,就看不到这个方法了。所以呢,我们执行的就是此类的这个方法啊。诶执行的是子类。
12:01
哎子类呢叫重写,哎复类的这个方法。好,这呢就是我们说的这个方法的重写啊,其实这个事儿呢,不是特别难理解啊,好,那这个呢,说完了一个场景咱们诶可以在呃,接下来呢,咱们再举一个这个例子啊,这块我们再over read啊,这read read啊都行啊,在这个下边呢,我们再写一组这个具体的例子了,这个例子的话呢,其实咱们就可以基于前面呢讲的这个person和student呢,咱们来说啊,好把它呢CTRLC。我CTRLV啊,原封不动的,我还粘一份过来了。这是person啊,相关的这个属性啊方法呀,这都有啊好,那么在这个student里边,原来咱们不是这个都没要吗?就把这个就删了啊。这个我都删掉了。好了,那这个我们把这个也删了吧,现在呢是有person,有这个student,然后回过来啊,注意看。我这呢,就称为呢,叫override测试啊。好,没方法,这个呢,我就不写这个person类的类的对象了啊,不涉及到我们继承性了啊,继承性这块呢,我们就直接造此类对象。
13:10
好,这呢,我有个student顿啊,通过这个student顿这个对象呢,哎,目前比如我们去调这个E的方法。哎,调这个sleep的方法。这两个方法的话呢,在我们student当中,咱们都没有声明过。哎,所以这时候我们调用的话呢,其实都来自于它的负类。哎,就是这两个方法。哎,所以这时候呢,我们再去做执行的时候啊,就是刚才看到的负类中的两个方法的一个执行。说现在呢,这两个方法呢,我们说呢,不太适合于我们这个student了,那我们就可以做重启。哎,重写,哎怎么重写呢,哎目前来看呢,我们比较直接的方式呢,就大家呢,你就可以把这个方法呢,原封不动的,我先CTRLC。然后呢,你回到student这块呢,我先给你原封不动的先粘过来。哎,你看这块呢,有个符号这个符号这个O呢,就是over redad的这个意思,我点一下啊就跑这了,这个呢,你被谁重写了啊,点一下就回到这来。
14:08
啊,就是他俩呢,就构成了这种你是被重写的,我是重写的啊这样一个关系啊好在这里边呢,我们就简单的去写一下来说这个学生啊,应该比如多吃啊有啊营养的这个食物是吧。好,那么这块呢,我们就改了改这个方法体啊呃,其实呢,关于声明这块呢,都没动。一会儿咱们说这个细节的问题啊,那么回到测试这块,此时我们再去调这个一的方法啊,刚才呢,我们看到的是这样的这个场景。哎,是它啊好,现在呢,我们再去做这个run。哎,你发现的这个E的方法呢,就变成了我们这个学生他重写父类的这个方法了。哎,这个sleep呢,因为我没有重启,所以还是负类中的。哎,这个呢,比较好理解是吧。哎,这就我们说的叫方法的重写。哎,那么哎归结为啊,我们什么时候要重写呢。
15:01
哎,什么要重写,其实就说清楚,我们说为什么要重写了。啊,那不就是说你此类这个方法呢,发现呢,负类这个不太适合于你了,那你就重写就完了。哎,这呢,就是我们说的这个场景,好,那么下一个问题,哎,那重写有什么要求吗?哎,这就涉及到我们这个方法重写遵循的这个规则了,哎,刚才呢,其实我们测试的时候呢,呃,是避开了这个详细的规则,那下边我们具体来看一看有哪些规则啊。那么这个规则的话呢,我们需要呢,从整个这个方法的声明去入手,细节的来去讲一下啊,那我们先复习一下方法声明的这个格式啊。权限修饰符。范围之类型。报名。哎,形态列表是吧。这个大块这里边呢,叫方法体。诶,这就是这样的场景了啊,好,那么我们就由这样的几个位置出发,咱们来看一看具体重写的时候有没有什么要求。因为你要是没遵循这个规则的话呢,这个也不能认为叫重启啊就啊说白了就是你覆盖不了了。
16:04
哎,那具体的规则,首先第一条。哎,首先啊,咱们是子类,把父类中的那个方法给覆盖掉了,首先你得明确你盖的是谁吧。如果说我在person里边,咱们这叫it,我没写参数,我是不是还可以写有it的,哎,有参数的说白了就是有重载是吧。重载呢,可能有好几个,现在呢,我们这个这是负类啊,我现在这个子类呢,我想覆盖父类是不是你一定要知道覆盖的是哪一个吧。那杨爱之呢?就是我得确定是哪一个。咱们前面讲重载的时候说过,怎么就确定是哪一个方法。对,光看名不行。是不是还有形态列表?对,通过方案名和现在列表呢,我们唯一的确定一个方法,所以现在你想覆盖谁,你得告诉我你确定的到底是谁,所以咱们就要求啊,哎,我们这呢称为注意这块咱们先起个名。父类中这个比如方法我们称为那叫被重写的方法。
17:03
哎,子类这个呢,咱们称为呢,叫重写的方法。啊好,那这块我们说呢,叫哎负类。被哎重写的这个方法与子类。啊,重写的这个方法。重写的这个,哎,方法的。哎,方法名和形态列表必须相同是吧。来发明和。哎,行三列表啊,必须一致。必须相同。啊,这样。因为这样的话呢,我们编译器才知道你到底是想覆盖父类中的哪一个方法。因为我们通过这儿呢,才能唯一确定。好,这一点是不能变的啊,那么基于这个场景呢,我们看看下边的这个事儿,那这块呢,不就涉及到叫全修熟了是吧。那这块说能不能不一样呢。哎,这块是可以的啊,这块我们这个要求呢,是这样的啊,说这个呃此类啊,重写的这个方法。
18:00
啊的,哎,权限修饰符。啊,要不小于。哎,负类。被重写的方法的。哎,权限修饰符。注意我这块叫不小于,就是你等于也行啊,要么等于,要么更。更大。对对,这块我们可以形象点去理解啊,比如我们这个person里边呢,它这个方法权限修饰书表示它的一个访问的一个权限,咱就理解成一个大小啊。这呢是这个父类的啊,说现在这个此类呢,想把你覆盖掉。你你这块你整了一个这个这个小圈你也盖不住我呀。啊,形象点理解呢,就是最起码你是不是得给我整的这个这个一样大呀。这个咱们怎么干啊?不是我我我罩不住啊,知道那意思是吧,至少得跟你一样大,我才能盖住你,或者说我比你更大。这不也把你就盖住了吗?哎,所以这个更大呢,就意味着他的权限呢就更大了。
19:00
简单的看一下啊,你比如说我们这里边这个it,这个it这块呢,咱写成public了,我现在把你改成这个叫缺省权限了,诶你看这块这个符号仍然有。我这个权限比你大,或者我这块我写成是这个它也行是吧,哎,我写成叫a protected。哎,Protected下边这个你看这是不是也算叫重写是吧,诶我只要比你大就行啊呃,但是这块你要是person这块,你整的那个public。嗯,我这块比你小。这就不行,盖不住。哎,所以这个呢是不允许的啊,那杨I这呢,就是如果负类那块是public了。那你没得选。那你也只能是public。哎,这是这个场景啊,好,这里边儿呢,有个特例哈。颗粒这块我说一下。呃,按照我们的理解的话呢,这个就没啥事儿,但是这块强调一点就是如果负类张这个方法呢,是private啊。负类里边,如果private按说呢,你这个子类呢,你随便整是吧。呃,但是这块我们说呢说呢,这个此类啊,它是不能够重写父类当中声明为private权限的方法。
20:05
我在这写一下啊。说此类。哎,不能。哎,重写哎,父类中声明为。哎,叫private。权限修饰的方法。就有这样的一个规定了,算是啊呃,你可以理解为呢,就是复类中private呢,它出这类呢,他都看不见了,看不见的话你也盖不住。哎,你可以这样去理解啊,哎,那咱们也可以简单来看一下,如果呢,我这写成private了。整个这套符号呢,它就全部不存在了,虽然你说呢,你看我比你大是吧,那不好意思,这块我不认为你是一个覆盖。你就是额外的又新定义了一个方法。负类是负类的,你的是你的。哎,注意是这个意思啊呃,这块的话呢,我们稍微的注意一下这个事儿就可以了啊。好,这呢是我们说的这个叫权限修饰符这样的一个问题了,然后接下来的话呢,就是返回值类型了。
21:01
嗯,这块大家觉得呢。比如说哎,负类当中的这个反应类型呢,它是Y。子类这块呢。也得是Y的了啊对,那负类这一块呢,如果说不是Y的是有具体类型了,那这类怎么着,这块我们还得展开来说一下啊。嗯,这块呢,我们说关于反复质类型这块啊。关于。哎,返回值类型。返回值啊,类型这块呢,其实得稍微的细一点说了啊,嗯,这块呢,如果我们说第一种情况呢,就是。嗯。这个负类。哎,背啊,重写的这个方法的啊,返回值。类型是Y。是吧,哎,我们说这个则子类。哎,此类的,这个我们叫重写的方法的。哎,反之行。返回值啊,类型也必须是。
22:01
就咱你俩得一样啊。其实这个事儿的话呢,应该不太难理解啊,你这块呢,比如说没返回值到此这一块,你整了个返回值,那那也不合适。这个我都不用测了啊啊,这是一种场景,然后第二种场景。第二种场景的话呢,就是有反复类型,但是有反馈类型这块呢,其实我们还得又细分一下。呃,法文类型呢,是基本书类型。啊,还是赢属类型啊。哎,如果负类啊,被重写的方法的返回式类型是基本数据类型。啊,基本数据啊,类型啊则哎子类哎重写的方法的返回值类型必须。与负类中的类型相同啊。必须与。呃,被重写的啊,方法的。嗯,返回值。类型相同,注意我这块写的是相同。啊,来,我举个例子啊。嗯,回过来在这个person里边呢,这块咱们就不用现的方法了,我就随意的给大家举一个了啊,他这个比如说我这块写的是in啊。
23:07
这呢,我就写一个叫infer吧。那这个方法呢,执行完以后啊,它有一个返回值啊,我就暂且呢写成一了哈,那么这个方法呢,我现在呢,被这个此类呢想重写哈,你看回到这个STEM这块,哎,首先呢,我原封不动粘过来,这其实就算是一种重写了。哎,但是现在核心呢,我们主要是看这个位置啊,哎,负类呢,如果是基本数据型这个int,我这儿呢只能写成int。哎,当你试图写成更小的。不行。啊,不让你这样写啊,我写成个大的呢。也不行。哎,你就得写成你对应的这个基本数据类型。啊,这呢是个要求。啊,这个是我们这个,诶重写的这个。哎,这个测试啊,重写的,哎,针对于。哎,返回值的这个测试啊。好,这块大家去注意一下,哎,那么回过来,呃,还有的这个可能性呢,那就这样了啊。
24:04
说这个负类呢,被重写的方案的反应类型是饮水类型。是引用啊。哎,那么引用数据类型的这个类型可多了,咱们这块呢,就诶先主要以这个类咱们来去举例哈,比如说呢,我们在这person里边啊,我再去写一个方法啊,Public这个呢,假设这个返回值呢,我就写成person了。这个呢,我叫一个IN1,比如说啊。具体具体这个方法体的这个细节咱们先不说啊,我就return了,那么这个方法CTRLC一下,我们放在这个子类里边,首先呢,我们跟类一样,肯定没问题。那关键就是说能不能更大呀,或者更小啊是吧。那这块呢,比如说我们把它写成这个person的子类。啊,举个例子,比如说就是这个student。可以吧?可以是吧。哎,这个是可以的啊,那我要写成那个person的负类。
25:02
比如说object是吧,这个你发现就不行了。不可以。哎,所以这块呢,就是诶,我们刚才看到这个场景啊,这块也算是关于返回值的这个测试的这块,我们看怎么说啊。说这个负类的被冲序方法,反数类型的是引用数据类型啊,这个们说哎,比如类是吧。就以这个类来说了。哎,那么则子类重写的方法的反应类型。啊,他呢说可以。哎,可以与这个哎负类,哎就把负类就省啊可以呢,被重写的放在反应质类型相同。这有点长了啊。类型相同或。啊,是啊,被重写的方法在反物质类型的子类。哎,发回值啊。类型它的这个子类,哎,就像我们刚才这里边儿呢,负类呢是person,我们子类这块的一个方法呢,写的是student。
26:01
哎,就是这个。是可以的啊。啊,那这块大家怎么去理解呢?那其实呢,你看啊,我们父类这块呢,说你给我返回一个person,相当于我们得返回是个person的一个对象了,那这块呢,说诶我得返回一个student,实际上student是不是也算是一种person。对,你就先这样泛泛的去理解一下,后边呢,我们讲完多肽以后呢,大家你再看这个事儿呢,你会更透彻。啊,诶,西安你就知道这个规则就行,好,这呢是关于法律类型,你看这个事儿还挺多的啊。呃,那么再往后说的话呢,其实这就看到方法体了啊,方法体的话呢,你说跟父类中的这个一样吗。被重写的那个方法。那一定不一样是吧,你要一样了,那你重写干啥呢?哎,咱们重写的目的其实就是要改方法企业是吧。哎,对这块啊,我们我也写一个吧,关于这个方法体的这个事儿哈,说呢,这个没有要求,其实啊。就是你想怎么写你就怎么写啊,没有要求啊,但是呢,我们说这个诶此类。
27:02
哎,重写的。哎,这个方法的这个方法体是吧?它必然是吧,呃,与父类呢,被重写的这个方法的方法体不同是吧。这个呢,这一说大家都能明白哈,啊,那其实这里边儿呢,我们说还有一个要求,这个要求呢,咱们还没讲这个后边这个异常,但是咱们先放到这儿哈,就是在这个方法,呃,声明这个小花的后面在这个位置啊,以后我们会去讲啊,它可以呢去抛出异常。这就涉及到一个异常的类型。啊,这个事儿的话咱没讲啊,所以这块我暂时呢,先加个这个中括号啊。它呢也确实对一个方法来讲不是必须的了,哎,当然呢,如果你要是有的话呢,这块也有个要求,咱这呢就彻底的把这个要求呢,就都给大家写出来啊,所以呢,我就先放到这儿了。以后呢,我们再专门去说,所以暂且这个位置呢,它属于一个超纲的啊。哎,先把规则放这儿,这个规则呢是这样的,就是说呃,关于这个返回值,呃,这个抛出的异常类型的问题就是呃子类啊。
28:00
子类重写啊,父类中这个方法,它抛出的异常类型的,可以是父类中这个方法类型的。此类。或者跟傅雷这个一样。啊,这个我们这样说啊。之类。重写。的方法,哎,抛出的异常类型,哎,可以与。父类被重写的方法。哎,抛出的异常类型相同。类型相同是吧,哎或呢是负类。哎,这个被重写的方法抛出的异常类型的子类。这个这话呢,总感觉有点绕绕的是吧,那其实到时候我们这个真正写代码的时候,你一看其实就能明白这个事儿了啊,就这个位置呢,如果我们写的是个负类这块啊。就是在这个person里边呢,如果这块我写的是个呃类型,然后呢,你子类重写方法的时候呢,可以跟它类型一样,也可以呢,是这个类型的这个子类。就这是子类,这是父类。
29:00
就行啊,这个以后呢我们再说,但是呢,我们就先放到这儿了啊。啊,然后这块呢,是下边这算是一个补充说明啊。诶行就这样啊好,那么这样的话呢,我们关于这个方法重启的这个具体的规则啊,就彻底的就说完了,这个规则说完之后呢,其实大家的话呢,也就看一看,听一听就行了。什么意思啊,诶这里边你看提到了,要么是要求一样的,要么说不小于的,或者说呢,要求一样的,或者说和你是你子类的,诶是是子类的同时呢,跟你一样也行,包括呢,这个异常这块也是这样。哎,既然这样,那我何不呢?跟你父类这个呢,我就完全一样,是不是也行。哎,你说你这个是what,此类是类是word,此类必须是word,这写int呢,此类呢,也得是这写一个person呢,此类可以是person,也可以是person,此类我就不整这么复杂了,我就全是跟你一样的。这个跟你一样,这个跟你一样,这呢要求必须一样啊,肉异常呢说也可以一样,干脆我就全一样。
30:01
所以呢,我们在重写的时候呢,一般咱们都这样做,我把负类的这个方法完全的声明我CTRLC一下,我放在这里边儿呢,咱们就直接呢粘过来。我在这里边儿呢,就专门去写方法体是吧。哎,说呢,诶这个学生啊,应该啊多。多睡是吧。这个。养养大脑是吧。得,得多睡啊。大脑。是。脑是吧。行,或者这个这个这个。这个叫什么?呃,有利于大脑发育是吧。行,你看这个呢,我就写完了啊,写完以后的话呢,你回到这里边儿呢,这个叫sleep,自然而然的就是你重写以后的哈。哎,这就没问题了。诶,所以呢,你看我从负类这块把这个方法的声明呢,我CTRLC粘过来放到这儿,这呢绝对不是偷懒。这个呢,叫智慧的体现是吧。啊,这个你肯定就错不了了,你说我自己在这写写了半天,结果发现呢,要么这块比如说多了个E。
31:02
这根本都不是重启了,你说这块怎么没覆盖呢?是吧,自己还整不明白。啊,这块怎么还是叫负类的呢,因为你这块根本就不是覆盖是吧?诶所以这块你自己写的时候你就粘过来是最保险的,哎,你一会儿又比你更小了,更大了我就不管了,反正我就跟你一样。这也是咱们通常的做法。啊,当然了,比这个更快的话呢,有时候你这个负类呢,我都懒得去找了。我就直接呢。看这写的是不是跟他就一样。哎,他就给我提示了是吧,我就直接回车。嗯,这块大家看到一个不认识的修复是吧,你就再一回车就看不见了。哎,这个我们再讲的话就讲super了啊,诶这样你看就过来,过来以后的话你想干什么,你再想重写你就写呗。而且呢,这时候大家发现呢,上边有一个这个东西是吧。对,这个东西呢,咱们称为呢,就叫注解了啊。哎,这个注解呢,你一看这个词,你就知道什么意思。表示呢,我们对负类中的某一个方法做重写了。它的作用呢,你比如说我这边写了,跟我没写,跟我是不是重写有关系吗。
32:01
没关系,你如果删了,这是不是也叫重写?对,它加上的意义呢,就是它能做一个校验哈。你比如说像我刚才这块,我多了个亿,他也不不知道说我这。怎么回事,他也不会报错,但你要这个位置,你要多了一个E啊。谁报错了?说你想重写,那你这块又负类中又没这个方法,他就相当于他告诉你说你这个不是重写的啊。对,就能给我们做一个提示了啊。行,这呢就是它的一个意义所在。好,那么关于整个方法重写呢,咱们就告一段落了啊,就算是结束了,哎,那么这块呢,呃,就提到了一个面试题啊,这算是一个比较经典的面试题。也可以说呢,是比较老的一个面试题了。嗯,还有面试的时候还要问,其实我觉得面试官呢,这个问题啊,就不要问了,确实呢。有点low感觉都是吧。诶,但是呢,如果他确实问到了,然后你自己答的呢,还不太顺是吧,还说错了,甚至说说的都不太对。那就完了哈。哎,说白了就是这个问题呢,非常简单,别说别说错了啊。
33:02
好了,那大家呢,该如何去答这个问题呢?区分放的重载跟重写。哎,其实呢,在我们实际这个,呃,笔试面试当中啊,有一类问题就是呢,俩长得比较像。哎,方法的重载,方法的重写,你看诶长得挺像。这块我就给你放到一起就烤一下。其实这俩。没有什么关系哈。对这个重载呢,想想咱们是在什么场景下说的呢。对,其实就是咱们说的那个两同一不同是吧。说白了啊,就是我们现在呢,在这个类里边定义方法,这个方法呢,比如说排序,排序那咱就叫叫salt了,但是这块排序呢,一说你这有好多种不同的参数类型。那当然,我们不能说这个叫SORTT1,这叫SORTT2,这看来不得怪怪的嘛,所以我们就都叫salt了,贱民之意,那你就这个参数名别一样就行,这就叫重载。啊,就两个同音不同啊,哎,重写呢。
34:03
重写对,说的直白一点就是继承以后首先一定明确啊,重写是继承以后啊。哎,然后呢,你此类呢,对负类这个方法呢,你觉得不太满意是吧,你就覆盖一下它这叫重写是吧。子类呢,就相当于是,哎覆盖。哎,负类中的这个同名同参数的方法。哎,这个方法是吧,这个呢就是一个重写,所以这块区分的话呢,你就把这两个事呢,各自呢讲清楚就可以了。也就是说呢,有的时候你看这俩东西长得很像,可能他俩呢,没什么关系啊,那叫区分呢,其实有点牵强了,就是各说各说清楚了就完了。啊,就行啊。呃,那这里边有个细节就是比如这是负类,这是此类,以前我们讲重载时候还没讲这个继承的啊,现在讲完继承了,比如说负类里边呢,假设这个方法呢,叫A没有参数啊,诶我此类集征负了以后呢,我这个A也这样写,这其实你就相当于要重写了是吧。哎,那如果说我这块又定了个A这块有个参数了啊。这个跟他算,就是这个假设也没重写啊,这俩算重载不。
35:04
啊,你在子类这块呢,其实也算了。因为你通过这个此类这个对象调方法的时候呢,是不是也得考虑是哪一个是吧,哎,所以也看着要重载了啊,诶注意一下就行啊好,那么这个问题呢,就比较简单,就是各自答各自的就行。没什么相关性啊,你也可以说重载重写和重庆的区别是吧?啊,因为带都带个虫字啊,其实没什么关系啊,那么我们后续的话呢,还会见到很多类似的问题啊,比如说让你比较一下,像我们上边有一个叫roses是吧,诶让你区别它跟这个肉的区别。哎,很多同学还真整不明白哈,还有呢,这个比如说叫final这个关键字哈,Finally是个关键字。Finalize呢,是个方法,哎,方法名他们仨有什么区别?还有呢,这个叫a collection和这个。诶,Collections有什么区别啊,诶我们以后还会专门再说一个string啊,String呢,还有两个相关的类。哎,对,String buffer和string builder啊,说这哥仨有什么区别,哎,还有呢,这个叫least least和这个link的list。
36:08
List是吧,来说他俩呢,有什么区别。啊,然后还包括我们现在提到这个重载重写这块有什么区别。啊,还有呢,比如这个哎,哈希map,还有这个叫link的。哎哈希map,还有呢,这个叫哎哈希table说这哥仨有什么区别。等等啊,类似的这样问题呢很多,呃,那有的呢,是在同一块知识点讲的啊,但是呢,相互之间呢,有可能关系并不太大。尤其像这仨是吧。完全没什么相关性,就是长得有一个共同的前缀而已啊。那么在面试当中还有一类问题就长得不太像的哈。对。对,有可能他们之间会有一些共同性是吧,比如说这个sleep跟wait呢,有什么区别啊,你看这俩长得就不像啊,然后还有呢,比如说等等啊,咱们后边还会专门讲这ES说这俩什么区别啊,那长得都不像。
37:01
这种不像的呢,有可能还真是有点相同的是吧。啊,然后呢,还有比如说这个以后我们还涉及到这个叫,诶同步于异步。这个这个。同步。哎,与这个异步。一步对,还有这个return啊,Return了那个,呃,Break continue啊,加个return啊,他们仨有什么区别啊,类似的啊,这个呢,你放这儿也行,或者你放在这儿,你说都有个布,那就放这儿是吧,哎,就类似的这种啊,这呢是一类问题。行,到时候我们再说啊,那么关于重写呢,就这些。好,那么重写完了以后呢,我们看一看这个对应的课后练习题啊,这块呢,有两个小的题目,诶首先呢,我们来看第一个啊,这个呢,重写我们说都是基于这个技能性的,所以这两个题目呢,我们也是基于前面的继承性来说的。啊,这里边呢,提到了说修改一下啊,继承内容当中练习里边这个case啊,重新呢定义一下这个employee的这个方法啊要求呢这样呢去编写好,那这样呢,我们就把继承里边的呃,这三个类呢,我们先CTRLC一下,咱们粘到咱们当前的这个里边。
38:10
哎,就CTRLCCTRLV就行了啊好粘过来以后的话呢,这块主要针对的是这个K这个类。啊,我们这块呢,做一个调整。哎,我把这个需求呢粘过来。往后一点啊。好,说呢,修改一下我们这个case这个类说呢,呃,重新定义一下我们这个employee这个方法呢,来自于它的父类。诶负类里边呢,这有一个叫employee的这个方法,诶把这个方法的话呢,我们可以,诶刚才也提到了啊,怎么去写呢,把这个整个的声明呢,我们CTRLC一下,诶拿过来直接呢,就放到我们这个诶后边。诶放到我们这个后边这块啊好,那么这个方法呢,他怎么要求的呢?呃,他要求呢,我们这块呢,输出的是这个信息啊,就是你不让学生呢,应该啊,孩子应该工作啊学习啊,不应该工作。好,这呢,我们就直接来写一下这个输出了,哎,这样就可以了,好,那这个一旦写完之后呢,我们回到这个测试这个层面,这边有一个叫employee的这个方法嘛,诶此时呢,我们按住CTRL键啊,你看我一点,这时候就直接点到kiss这块了。
39:10
哎,那你如果要是把这个方法呢,给注入掉的话呢,诶,我们回到测试这块,你看这是我按住CTRL键,我再一点这块是点到这个manca这里边。哎,所以这块呢,我们,哎把它打开,实际上呢,就进行了一个覆盖或者叫重写了,哎,那此时呢,我们再去做这个run。执行的就是我们此类重写父类里边的这个方法了。诶,没有问题啊,行,这呢就我们重写的一种体现了啊,接下来我们来看这个第二个题目啊,这个题目呢,是针对我们前面的提到的这个,呃,圆和圆柱的这个问题来的,呃这里边呢,要求我们在圆柱里边呢重写父类的叫find area这个方法。好,我们把这个呢,完整的这块呢,CTRLC咱们都拿过来啊。啊,这块已经有它了哈,那就是这三个CTRLC。哎,CTRLV啊粘过来。好,那么粘过来以后呢,刚才非常明确啊,就是在这个原著这里边呢,我们需要呢,去重写,诶这个父类circle里边的find error这个方法,把这个方法的话声明啊,CTRLC拿过来。
40:09
放到我们这个圆柱里边,比如说放到这个最后了啊,那么对于这个圆来讲呢,就要求面积,那对于圆柱来讲呢。哎,这呢,因为你是个立体的了是吧,对这个就成了叫求表面积了。哎,求这个表面积了啊。对,表面积的话,就两个底,再加上你这个侧面的面积。OK啊行,那这个呢,我们看看该怎么去算呢。哎,底面的面积是吧,底面呢,你得三点。一次哎,乘以哎,这个get radius,因为直接不能调radius,哎,权限不够是吧?哎,Get radius。再去get一个radius是底面圆的面积,一个面两个面是吧?好,再加上侧面面积怎么算?对,这个纯粹呢,得需要你记一下乙原来讲这个公式了是吧。
41:04
呃,简单的一句话啊,哎,侧面的面积呢,你把这个展开一下,其实就是。对,就是个句型呗,是吧。呃,矩形的这个长呢,就是你这个圆的周长。呃,然后这个高的话呢,就是我们这个矩形的算是高啊,或者要宽啊都行哈,哎,那这个圆的周长。多少?二派二是吧,二乘以3.14啊,再乘以getus。这呢是呃,圆的周长,也就是侧面的矩形的长。再乘以get length。哎,这就可以了是吧,行这个呢,这是以前上初中的时候吧,还是小学时候。小学啊,讲的这个公式啊。好,这个呢,就要求表面积啊,这个呢,算完以后啊,回过来我们在这个测试里边注意。哎,原来呢,我写的叫求圆柱的底面积,现在你按住CTRL键再一点跑到这来了。这就不是底面积了,因为你重写了,这呢就是圆柱的表面积了。
42:04
就成这样了啊好这块呢,我们做一个运算。哎,这样是吧,哎,但这块运算的话呢,注意哈,虽然说这个结果出来了,哎,其实可能会有问题,问题在于哪呢?他这没事啊,你看这个。这个呢叫求体积。求体积呢,你看我们现在算出来这个数呢,是这么多是吧。哎,算是这么多这个数对不对呢?哎,这个数呢,你看我们这个怎么算的啊。这个咱们讲求体积的时候呢,说过两种方式,说呢,你直接呢,就是底面的面积呢,乘以高,这是一种,然后呢,我们当初的时候呢,没有重写,咱们呢叫find area,用的是负类的方法,现在你重写了。此时呢,你按住这个CTRL键啊,一点是不是点到这儿来了。所以这时候的这个范戴瑞已经不是当初那个范戴瑞了。所以这时候呢,目前来看这个方法啊,目前这样写是不是就错误的。哎,对,这个一定要小心啊。
43:00
哎,这是错误的,然后你只能是改成上面这个才行,这个呢才真正是求这个体积的,所以回过来我们再去做运算。哎,这个数呢,才是真正的体积,这个是不对的啊。哎,这个要小心一点,也就是说,呃,怎么着啊,说呢,这是一个负类,这是一个此类,说呢原来呢,这个负类的方法呢,此类这块就都拿到了啊,就是这个我们这样画一下啊,这是父类,这是子类,这里边呢,假设有个方法这块呢,我们集中以后呢,哎,就当拿到了,所以我这块画一个虚的啊,哎,在另外的你这个子类的这个方法里边,我用到负类这个方法了,你就直接用。这个用的时候你注意呢,其实是用的负类的,但现在呢,你这此类把这个方法给重写了。这时候你再用的默认就成了你此类这个重写的方法了。所以这块你要小心一点啊,这个你得适当的去修改这个逻辑了。那当然有同学就会说说我现在我就想用负类这个方法,你现在此类给我覆盖了,那不行。我就想用。哎,这个需求呢,其实也算是合理的,这就是我们为什么要讲下边一个关键字,诶这个关键字呢,就叫做super的一个原因。
44:02
啊,也就是说呢,我们就想在此类的方法里边调用负类中被重写这个方法怎么办呢?其实呢,你只需要前面加个super点就可以了,不加就认为是重写的,加上就是负类的。啊,比较简单啊行,那么关于重写呢,咱们就是这两个题目就说到这儿。
我来说两句