00:00
那接着呢,我们来说明一下,这个第五个特征是语法层面的一个改进啊,那语法层面的改进呢,有这样几个啊,5678都是语法层面的改进,后边的话呢,有几个呢,是API层面的一个改进,好那我们就先来看一下这个语法上面啊,那这里边儿呢,提到了说接口当中呢,可以去声明叫私有的方法。这个呢很特别啊,呃,我们知道这个接口中在这这七档中说只能声明这个叫出样方法,哎,八档中呢,对接口中呢结构呢有所改变,九中呢又改了啊这里边呢,就反映了Java开发团队啊,他对这个接口这个结构啊,一个重新设计的一个理念啊在这里面。好,这个官方的feature呢,是在JP231这个点上提到的,那我们按住这个CTRL键呢,可以点进去看一下。啊,这里边呢,是提到了具体描述呢,有好几个啊有五个啊啊像第一个呢,它主要呢提到的是一个注解的问题啊,这个注解呢,可以使用在一些呃,私有的实例方法上面啊这呢咱们重点不看这儿了啊大家呢来看第五个点。
01:05
啊,第五点呢,就是support for private methods in interfaces。说呢,支持在接口当中声明私有方法。啊,这呢,就是咱们重点要提的这个事情,哎,我把呢,这一段话呢,CTRLC诶粘到了我们这个PDF这个下面,这呢,就是刚才那个官方的一个说明。啊,非常明确的说明了在结口中支持私有的方法,那具体的一个使用的那就不用多说了啊,那这呢,咱们就主要呢来演示一下,先打开这个八,哎八当中,哎,我们在这个下边呢,大家可以去写一个具体的例子了啊呃,我们呢,去创建一个比如说class啊。啊,这个我叫MY。Face。它的一个测试。好,这呢,我写的是一个类,嗯,然后上面的话呢,我们去创建一个接口。Interface,我这呢就叫做my interface。
02:04
行,那这个接口里边都能声明什么,这个呢,我们来给大家从前捋一下,在JDK7和以前的版本当中,我们说接口中只能。哎,声明叫全局常量。啊和呃,所谓的呢,叫抽象方法啊,这呢应该大家都是比较熟悉的,那全局常量呢,他们的全修饰符呢,都是public啊,然后static final的来修饰我们的这个常量,那抽样方法呢,叫public abtract。好,这是这个结构,那这是我们这个JDK7当中的啊,比如我这呢,简单写一个Y。啊,然后METHOD1。啊,这呢,其实就是一个抽象方法了,然后呢,在JDK9呃八当中提到了,说接口中呢,还可以声明叫静态方法和默认方法。
03:00
啊,这个呢,已经是感觉有些神奇了,来,我们写两个例子啊,Public static word,哎,我写个METHOD2。注意从JDK8开始,方法呢,竟然可以有方法体了啊,也就是说不管有抽象方法了啊,这呢,我们比如写一个就叫METHOD2啊点啊输出一下,那同时的话呢,还可以去定义叫默认方法,比如说default。嗯,然后呢,Boy的一个METHOD3。这呢,我就写上麦的三。哎,输出一下好,这呢就是我们所谓的静态方法和默认方法,那这里呢,大家也看到了啊,这个静态方法和默认方法都有方法体,那言外之意呢,就是我们出这个接口当中啊,实际上呢,就可以去呃,通过接口直接来调这个静态方法,或者呢,通过这个接口的实现类的对象去调用接口中的默认方法。啊很神奇,那如果呢,之前有的同学呢,没有接触过张二八,那你现在呢,顺便学一下,知道接口中可以定义这样的结构了。
04:06
啊,那举一个不是特别恰当的一个例子啊,说原来呢,我们如果把这个类啊。哎,如果呢,大家把这个类呢,看成是人的话,那原来的这个接口呢,比如我们看成是兽。啊,这个兽,那现在的这个接口呢,那其实它已经是有点儿像什么呀,半兽人了。啊,这个接口原来说不能有实体方法,现在呢可以有了啊,它已经贴近于这个类的特点了,那或者你把这个人还类看成是人接口呢,你看成是妖的话呢,呃,现在已经是呃人妖了。啊,这个已经是有点融合的意思了,那通过这个层面上的话呢,我们说本身此类的话呢,它对于接口是实现多个接口的,那现在呢,实现多个接口,那接口中是有方法体的,那功能上的功能上来讲呢,就更加的强大了啊不用重写都可以有具体的一个方法体。
05:03
啊,这个大家呢,有过开发经验的人应该非常的清楚了,啊,这个我就不多说了,那那其实由这个出发呢,我们都可以给大家呢考具体的一个问题了,什么问题呢?就是非常老的一道面试题。哎,什么面试题呢,叫做抽象类啊和啊接口的异同,哎,说一道老的面试题啊,这呢,嗯,是是确实比较老了哈,但是说的好听一点的话呢,那叫经典的面试题,那这道问题怎么去答?那我要告诉你的是呢,它在不同的JDK版本下呢,是真的可以打出花样来的。啊,也就是说呢,虽然它比较老,但是呢,老树也可以开心花啊,那我们从几个角度来说,第一个角度呢,就是分别说出二者的定义。那二者这个定义方面呢,就涉及到了啊,比如第一个,嗯,这我写一个小A吧,哎,第一个点呢,你要提到他们声明的方式。
06:06
哎,那毕竟呢,抽象类还是一个类,那是使用class来声明,而接口呢,使用interface来声明啊,这是声明的方式,然后第二个呢,要重点提到他们内部的结构。哎,这个内部的结构这方面的话呢,抽象类没什么变化啊,说抽象类里边可以有抽象方法也可以没有啊,属性构造器,代码块内部类啊,该有的都可以声明啊,那对于接口来讲的话呢,这时候大家要打出花样来了,JDK7当中是什么样子的?哎,然后JDK8当中又怎么变了,JDK9中又怎么变了?哎,这长就能体现出你对技术的一个关注度了啊,这长就提到我们现在要提到的啊,七当中只能是这样,八当中呢,哎,在此基础之上又可以去声明进代方法和默认方法,那九当中有什么变化呢?我们说在JDK9中啊,可以声明。
07:03
哎,叫私有方法。啊,你要把这个点呢,给他答出来啊,具体这个演示呢,咱们一会儿去说这个事情啊,然后我们把这个面试题呢,给大家去讲一下,这呢第一个点你要说出来,然后第二个事儿呢,既然让你比较他们二者的异同,那你还是要提一提他们有没有所谓的共同点。哎,实际上呢是有的对吧,第一个呢,就是体现了叫都不能实例化啊,不管它是抽样类还是接口,它呢,都是不可以直接扭对象的。啊,这是它的一个点,那既然不能够用对象,但是我们在很多的代码当中都声明一个变量的类型为抽象类和接口了,那就意味着呢,具体二者在使用方面。啊,那都应该是什么呢?哎,以多肽的方式去使用。啊,这是他们的这个共性,然后第三个点,那就是提一提他们所谓的不同点,毕竟结构不一样嘛,啊那主要的这个不同点呢,关于二者,一个呢叫做单继承啊,一个呢叫做多实现。
08:05
啊,那这个你这样子,你去答这个问题,那我觉得呢,应该是会给你满分,或者给不了满分也得给90分以上。啊,那你说再锦上添花一点能说什么呢?那举点开发中的例子嘛,对吧?哎,无外乎就如此了。行,那这个题目呢,我们就告一段落啊,然后下边呢,我们来说一下这个JDK9中的这个特点,好,JDK9中呢,我们说是可以声明叫私有的方法了。啊,这个时候大家注意一下啊,不管是这这个七也好八也好,前边呢,你看我都没有写这个,这没写这个全限修饰符这也没写,虽然没有写,但是他们的权限修饰符呢,跟写上是一样的,都是public。啊,你也不可能写别的啊,比如说呢,我这你想写成一个叫pro啊ED啊,这样一写它就给你报错了啊,这是不允许的。啊,Is not alone是吧?哎,这是不允许的啊,也就是说呢,我们在JDK7和八当中,这些方法呢,全部都是公共的,都是对外暴露的,那JDK9当中呢,我们想做一些隐藏了。
09:08
啊,将私有的方法,呃,声明成这个,呃将方法呢,声明成私有的,那就不对外暴露,当然了,咱们现在是在这个八当中哈,如果我试图写一个呢,它会报错的。Method third。我写一个四。啊,这呢是写一个叫私有方法。啊,这显然是报错的,因为呢,咱们在这个八当中呢,还不支持这样的这个特点啊,哎,我把它呢注释一下,那注射完以后,那下边呢,我把这个文件啊,CTRLC啊粘到咱们这个JDK9当中。啊,这些酒当中啊,那我呢,就在这个Java test这个下面啊,然后呢,我嗯,不是在这儿了。这是咱们这个例项啊,然后在这啊,我CTRLV一下。啊,这就粘过来了。
10:01
嗯,My interface一个test哦,它这个粘过来,嗯,没有把我完整的这个,嗯,我粘的是这了啊,应该粘这CTRLC。哎,把它呢,我们先给它干掉。CTRLV。好过来了,那过来以后大家看啊,我把它呢打开。诶,这时候大家发现他就不再报错了,说明我们这个K9当中是支持这个私有方法,那既然支持这个私有方法,我们就可以考虑在咱们上边这个,比如说default这个方法里边,我去调用一下。Method。四。哎,这样我就调用了,那调用以后呢,呃,我们呢,可以写一个接口的具体的实现类,比如我们上面一个class叫MY。Interface的啊,哎,让他呢去implement我们的MY啊,Interface。好,这呢让他去继承,继承以后呢,咱们呃实现啊,实现以后呢,咱们这里边有个抽号方法啊,那你就去呃这个实现一下,它这个三的话呢,是一个默认方法,咱们就不让它实现了啊OK。
11:07
啊,这个呢,你愿意写个东西就写一个啊这呢我们说叫啊实线啊接口。啊中的这个抽象。哎,方法啊,叫METHOD1。好,这是这个情况啊,好,这块我们就不多不多看了,然后回到我们这个测试类里边,我写个may,哎,我造一个当前的这个对象。好翻了以后呢,我通过这个点,我们去调一下这个METHOD3。那我们执行。那那METHOD3里边呢,就调用了咱们刚才这个METHOD4这个叫私有的方法啊,是接口中的,那你试图呢,通过我们这个对象呢,去直接调用METHOD4呢,显然是不可以的啊,因为呢,人家声明成是一个私有方法啊,仍然是满足我们说的这个权限修饰符这样的一个规则啊。
12:03
嗯,总结一下。总结一下。接口中。既然呢,可以定义静态方法和默认方法。哎,说明呢,它就有方法体了。那既然有方法体,我们就有可能在这个接口中定义一些功能,类似的方法都有方法体。啊,比如说呢,我们比如说涉及到排序吧,啊,有排这个类型的,排这个类型,排这个类型,排这个类型,那既然都是排序里边呢,多少会涉及到关于比如说呃,几个位置变量的一个交换。那既然这段代码呢,就类似于是重复的了,那既然有重复的代码,那我们就可以考虑呢,给它抽取出来做一个封装,那我们封装起来以后,这个结构呢,又不希望对外暴露,那很自然而然的,我就将它声明成private了。哎,那也就是说呢,我们既然有八这样的一个新特性,那九中这个新特性呢,也应该是顺理成章顺水推舟出来的一个规定,只不过呢,他忘了把它在八中去添加了,那就是给加到九里边了。
13:07
哎,不知道通过刚才这样个说明,大家能不能去理解这样的事情。啊,那你原来如果只有JDK7私有方法啊,抽象方法,那你完全没有必要定义抽象这个私有方法没有意义对吧,而且本身我们说抽象和这个私有也不能共存。啊,有了B以后呢,这个九也应该自然而然的就出现,避免我们去写一些重复性的代码。是这样的啊,那另外的话呢,就是嗯,虽然接口中说可以有这样一些新的结构了,但是呢,对于我们自己开发来讲,咱们自己去定一个接口时候呢,通常还是呃定义成七这样的特点。像八九这样的一些结构呢,咱们往往是在这个新的API里边才能够看得到啊,比如说呢,Ctrl shift t,大家呢,可以去搜一下,咱们在集合里边会涉及到这个叫collection这个结构啊,那这个ctrl o一下这个结构里边啊,它就会定义相关的一些这个。
14:04
哎,有特点的一个方法啊,嗯。我们看一下这块。嗯,这个我看到的是JDK9这块还,嗯,接口当中。嗯,在我们这个接口里边呢,它实际上呢,就定义了一些有这个具体方法体的这样的一些方法了啊。啊,比如看这吧,啊,这里边就有方法题了,这就我们所谓的这个默认方法,就是咱们自己呢,其实很少定义哈,还是主要看GDP提供的API里边它呢,呃,用了比较多这样的一个结构。行,那关于我们这个接口当中去定义这个,呃,私有方法的这个事情,咱们就说到这儿。
我来说两句