00:00
我们呢,接着来说一下这个叫final关键字,这个关键字呢,这个不太难,相当于前面我们讲这个修货呀,This呀,包括后边的obstract呀,Interface啊来讲这个呢,是一个比较简单的一个关键字,那我们说一下它的一个相关使用,那直接呢,我们还是回到这个代码层面呢,来进行一个说明,直接呢,我们去新建一个class,我就叫做一个final的test。行这个关键字,我们这儿呢,写一个注释。关键字的话呢,都是小写,别写成一个大写的F了,这个final关键字首先的话呢,也是想呢,先给它翻译一下,那final译中呢,习惯上我们都把它翻译成叫这个最终的是吧,最终的这个呢,比较好理解了,大家呢,这个玩游戏的呢,应该像以前玩那个街霸玩过吧,应该都应该都玩过,男生呢,多少应该接触过都啊,就是一般的都是三局两胜嘛,哎,当你玩到第三局的时候呢,他通常就会有一个叫final是吧,就是最终的了,就是最后一把了,就这意思啊,就是好多这个游戏也好,或其他这个比赛也好,一开始呢,是两个对比,然后再两个比,再两个比,最终的这个决赛就称作叫做final,就是最后一场了,就这个意思,那么我们这个final的话呢,也把它翻译成就叫最终的,那它所修饰的结构呢,就一点这个最终的意思,那具体呢,我们看一下都是什么情况,首先我们说明的是这个final可以用来修饰的结构。
01:32
Final我们说可以用来修饰类,一个类可以说是一个final的,叫最终的类,想想是什么意思,还可以呢,用来修饰一个方法,还可以用来修饰一个变量,那么修饰完以后的这个结构呢,我们都可以把它理解为叫最终的类,最终的方法,最终的变量,那具体的话呢,我们就得展开来看一看,分别呢是什么意思?首先咱们先来说一下final用来修饰一个类。
02:04
Final用来修饰个类,说这个类呢是个final的,举个例子,我这呢声明一个class,我就写一个叫嗯final a这个类吧,这呢是一个普通的类,这个类上面呢,我给它加上一个final,那加跟不加有什么区别呢?说这个类是一个最终的了,最终呢就意味着它就不能再往下延续了,这个延续呢,我们就可以理解为是子类的意思了,那杨AG呢,这个类呢,它就不能够再去让其他的类去继承了,那像这个类呢,不能再往下延续,不能有子类了,就没有儿子了,没有孩子了,绝绝绝了,到这就说是要最终的啊,这个我这PPT里边写了一个类,说这个类呢叫做嗯太监类了,这个是我自己起了个名,就是你你别这个出去给人家面试的时候介绍说叫太监类哈,这就别提了,就是就到头了,你知道就这个意思。
03:04
好说还有类是这样声明的呢,确实有,确实有,咱们现在先把这个事先说清楚,我这final以后,下边呢,我们再声明一个类,我叫一个类B,当你试图呢,去继承于咱们这个final a的时候。他这块呢就报错了,这个错误信息,说the type b说你这个类类型B啊,说cannot这个sub class the final class说你不能作为final a这个类的一个子类,Yag呢就是它不能够被继承,你要是把这个呢去掉,这就不报错了,这呢就很明显的说明它的一个作用,用来修饰一个类,说此类就不能够被继其他类呢所继承。不能被其他类所继承,就说白了就不能有此类了,那么这些类的特点呢,就是不能被继承了,你要用呢你就用,不用呢就拉倒,反正不能被继承,就不能在现有这个类的基础上,你再去扩充功能了,就不可以了,比如说我们的这个string类。
04:11
String类,还有呢,我们的system类,还有后边呢,我们跟相关的像string buffer也是一样的,这些类呢,都声明为叫final的。言外之意,如果我们自己呢,去定一个类,让他呢去继承一个词润,这是不靠谱的,我写个c extend这个我们的street。这呢是错误的,以前呢我们也这样没这样做过,以后呢你也不要这样做,说呢这个C呢,不能够作为string的一个sub class了,那么你想一想,为什么我们这个呢,声明称是一个final的呢。为啥呀,对,是不让他被继承,那你为啥他非得加个final不让我去继承啊,那这个不让他,因为不想让他被子类继承,所以呢,我就不想让他被继承了,就拿这个事解释这个事儿了,成了这个string呢,咱们说表示的是一个字符串了,然后呢,它里边实际封装呢,是一个差形数组,就是我们对这个差形数组呢,相当于进行一些操作了,那不让你去这个继承,相相当于就是说呢,你不用在我这个string的基础上,你再去扩充功能了,关于这个字符串,凡是涉及到一些功能呢,我该写的都写,写完整了,你再去继承,你也做不出来什么新花样来了,也就这样了,就这样的意思。
05:42
你想我们去继承他,你还能干点什么别的吗?其实也干不了啥了,该有的方法令当中也都给提供了。就这么个情况了,那系统类也是一样,系统类的话呢,我们涉及到一些常用的一些比如说属性啊或者方法呀,他该给你提供的都提供了,我们基本上不会去把这个类呢继承过来,再去扩充功能了,因为它涉及到一些功能,该有的都有了,就不用再去扩充了,所以呢,我们就不用再去继承了啊不用继承呢,也不用说非得要加上final,那倒确实是,但是呢,我加上final呢,就明确表示说我这个类呢,不要去,不要去继承,你要用呢就用,不用就拉倒是吧,哎,就是这样的情况,千万不要去继承,就是明确表示出来说这个类不要继承啊,是这个意思,好,那么这个就完事,然后第三个点,我们用final呢修饰一个方法。
06:34
Final用来修饰这个方法,这个方法的话呢,我们称作叫最终的了。最终呢,到头了,什么意思啊。那就说这个方法呀,你就不能再往下延续了,往延续呢,你可以理解为我们可以让子类呢,是不是可以覆盖它就要重写,那现在呢,我生明成个final,就是表明我这个方法呢,就不可以再被重写了,因为重写呢,我们可以对父类的这个方法呢,是不是进行一个功能上的扩充啊,我现在叫final是最终版了。
07:08
是不是就不用再去扩充了,对,那所以说呢,用final修饰个方法表明此方法呢,不可以被重写,诶就是这样的一个意思,那还是咱们自己写个代码,举个例子,举个例子,还是在下边去写一下我这class一个AA,在这个class当中,我们声明一个普通的方法,或比如说就叫个收方法,行,然后呢,我们去声明一个AA的子类,比如叫BB,让他呢去extend培这块呢,咱们是做测试的,我就不把这个这个类写的叫建明之意了,就是看一下这个情况就行,然后然后呢,我把这个附类中的这个方法呢直接拿过来,这呢其实就算是一个重写了。这个箭头了,但是当我们把负类中的这个方法呢,改成一个final的时候,这时候呢,它就报错了,这时候我们往这一看,说你呢想去重写咱们的A中的收方法,但是呢,说cannot over read,你是不可以去重写的,因为我是一个final的方法。
08:16
那就说明这个情况了,这个呢你就别想了。啊,就final就是最终的意思。最终的一次,所以呢,有时候你也会看到这个,大家以后去公司的时候呢,经常会提供一提交一些这个文档,说我把这个项目写好了,提交了一个版本,这个有时候咱们会写叫1.0的版本,比如写个这个叫2.0的版本,就写这个版本号会可以,有的时候呢,在网上你会看到一个帖子,比较有意思的,他没有写这个版本号,他呢就写这个是一个版本,后边呢,这个产品经理又让他改,改了以后呢,说这是个final版,然后呢,呃,发现还不是个真正的final版,然后又让他改,就是final的final版,然后写了好几个版本,最后呢,绝对是final版啊,然后呢,就没有然后了啊,就辞职了,就是吧,实在受不了了啊,就是final的意思呢,就是说最终了啊,就是我不想再去做了是吧,结果呢,还让他改就受不了了,就啊final就是最终的意思了,这个方法的话呢,就不能再去延续了,方法呢,就是一个哎不能被重写的方法,那举例子,比如咱们呢,有一些。
09:23
方法呢,就是final的,在我们object这个类中有一个方法呢,叫get class。这个方法的作用呢,就是获取你当前这个对象它所属的类啊,我们打开咱们这个这个这个get class ctrl shift t,先找到我们的object进来,然后呢,Ctrl o找到我们这个叫get class,这个方法呢,是一个final的,表明的就是这个方法呢不可以被重写,它的意思呢,就是获取咱们当前对象它所属的类,你想想你重写你还能写出什么花样来呢?
10:04
写不出来啥了,你就还是获取它的类是吧,我这已经都给你写完了,你再重写其实也干不了什么别的,所以呢,就声明为一个final的,哎,就是这样子,那么刚才我们看这个object的时候呢,你会发现另外一个关键词叫做native,这个native呢,翻译过来叫本地的,这个咱们详细的关于native呢,就不多说了,Native本地的什么意思呢?就是我们这个呢,你会发现这个方法很特别,它没有写具体的这个大括号,这个方法起了,但是呢,我们调这个方法呢,确实也可以调,说明它确实还是有这个具体的执行的体的,那么这个怎么去理解呢?就是我们生命为native这个方法的话呢,其实我们再往下走,就开始调底层的C或C加加了啊,那这里边的话呢,我们就不会再去用Java代码来实现,所以这块呢,就相当于给你隐藏了一样,就是native关键字的意思,就是我们接着要调用底层的C或C加加的这样的一个代码了,诶我们这块呢,就没有对外开放。啊,就是它的一个意思了,行,但是你要知道它的这个方法的意思呢,就是哎,Final不能被重写,关注一下这个final就可以了。
11:08
行,那关于这个final呢,我们就说完了,当大家以后看到一个方法声明成final的时候呢,你就知道就别考虑重写的事儿了,就OK,行,那这我们说关于final修饰一个类修饰一个方法,先停一下。
我来说两句