00:00
那先把咱们刚才目前描述的说这个接口这个事儿呢,咱们引出来,这呢,我们去新建一个包,这叫张阿姨来写我们这个接口。关于我们这个接口的这个测试,这个叫叫interface。行,首先呢,把咱们刚才说的这样的几个事情呢描述一下,这个呢,我们叫接口的一个使用,那首先第一个问题,接口我们说是使用,使用呢,咱们看它叫interface这个关键字呢,来描述的,使用这个关键字描述也行,或者说或者说呢,使用这个关键字来定义,来定义咱们定义类的话呢,用的叫class,这是一个关键字了,现在呢,咱们换到另外一个关键字叫做interface,这呢就在定义一个接口,比如说咱们刚才看到了说这样的一个描述。说呢叫可以飞,我们就把它定义成一个接口,这个我就写成叫flyable了,就是可以飞这样的一个接口,那这个接口这个是类,你从这个形式上来看呢,它俩也是一个并列关系,所以第二点我们明确一下说这个在Java中,在Java的语言中,我们说这个接口和类啊,是并列的结构。
01:29
并列的这两个结构结构行,这是这个问题了,然后我们呢,使用这个interface呢来定义一个接口,那下边呢,就涉及到我们该如何去定义接口,就跟说如何去定义类一样,那我们定义类呢,就是定义类的成员,那如何定义接口呢?那其实也是定义接口的成员,接口中的这个成员,那下边呢,我们关心的就是接口当中都可以声明哪些成员,哪些结构,那这呢,我们就得多说一下了,多说什么呢?先写个3.1。
02:08
这个接口在咱们近期的这几个版本当中啊,还都有变化,所以咱们先说一个稳定版的,就是大家用的频率最高的,这呢就提到叫JDK,先是一个七,在JDK7以及以前的时候是一种情况,然后呢,在咱们这个诶JDK8以及以后的时候呢,还有改变,咱们先说一下咱们用的就是虽然说现在大家去公司里边可能装JDK8的也比较多,但是你用的时候呢,其实还是发现用的七之前的这种要多一些,所以八的咱们一会儿再说啊,那么这这八它的一个新特性了,算是咱们先说这个。在接口中可以定义什么结构呢?我们说在JDK7和以前的时候呢,在接口中说只能够去定义常量和抽象方法。
03:04
只能定义常量,而且这个常量呢,我们称作叫全局常量了和镜,哎,呃,抽象方法,那么全局常量这个我们先在这儿先描述一下,这个全局常量它是怎么声明的呢?声明为public static final的这个权益常量,主要是说他俩的啊,顺便呢,就是也提了一下这个接口当中这个属性呢,都是public的,那都是public的,然后下一个定义抽象方法,抽象方法呢,也是public的啊吧,Strict这样的,诶这呢是咱们这个JK7及以前的时候是这样子的,那么GT8的时候呢,我们说除了这个定义叫全局常量和抽象方法之外,说还可以定义叫静态方法和末。
04:04
默认方法。那么关于静态方法,默认方法,咱们呢,先先不着急说它,等咱把这个JDK7及以前的这个呢,咱们都说清楚以后,咱们呢,这个这个再给大家把这个八里边这个特性呢再说一下,所以暂且呢,咱们这个呢先先略一下啊,一会儿呢,咱们专门的去说这个事儿,这个先略了,那咱们呢,先针对于这个比较稳定版,或者说现在大一用的最多的这样一个版本,我们去说清楚,那这里呢,提到叫全局常量和抽氧方网。那下边呢,咱们就不妨定义一下,那这个叫Fla,就可以飞这样的一个功能封装到这个接口当中了,首先呢,我们说定义这个叫全局常量。权益常量来说,都得生命成public的,叫static的,叫final的,我们比如说定一个这个可以飞,咱们定一个最高速度吧,既然是个常量了,咱们就都写成大写的叫speed最高速度,这个我们在地球上飞的这个东西的最高速度,这怎么描述啊,我写一个7900。
05:14
单位的就不能在这写了,就是一秒钟7.9公里这个数熟不对,这是第一宇宙速度,第一宙速度就是一秒钟七千九七千九百米啊,7.9公里,第一宇宙速度呢,就是你要超过低于这个速度的话呢,就还能在地球上这个飞了,飞的还能掉下来,但是你要达到这个速度或超过这个速度的话呢,就跟人造卫星一的话一样了,就开始在绕着这个地球转了。啊,这叫第一周速度,当时是谁,是牛顿还是谁说的?当家说这这一个人说我扔了个苹果呢,这苹果一会就掉了,说我能不能扔快点,快到那就他能够绕这地方转圈,然碰到他了就那就这速度要足够快,这相当于是一个摆脱地球引力的一个速度,就是最起码得达到一秒钟7.9公里,这样你才能够像一个卫星一样在这转。
06:08
开是这样啊,那还有呢,第二宇宙速度,第三宇宙速度,第二宇宙速呢,就开始脱离这个地球了,但是你还脱离不了太阳,还在这个太阳这块行,这个这个这个恒星周围去转,那就是变成一个行星了,那第三宇宙速度呢,就是可以逃逸太阳系了,第三宇宙速度是吧。行,这个呢,我们再回来啊,诶,这个呢叫这个速度,我们希望这个东西呢,还是可以落到地上的,哎,我们就不要超过这个最高的速度了,然后同时public static final int来一个mean speed,最慢最慢整个一吧,哎,再来个一,哎,这个我们定义了一个最快速度,最慢速度,这两个呢都是叫全局常量。权限商量,那你看到了我这块呢,声明的是这样的这个权限了,那你如果说诶我要把这个PU这个要去的,他是不是会报错呢,你就使用默认权限了,会不会这样呢?这来你发现也没事,说这个TE的话呢,说要是用户万一要忘了写怎么办呢?一删了,诶也没事,Final删final也可以删,删了也没事,删了以后它是一个变量了吗?对,还是一个常量,只是说呢,因为人家接口中只要是常量都得是这样子的了,它只是说既然都这样写,那你就省略掉吧,省略掉我认为你也有,哎就这意思,也就说呢,权限常量呢,我们要求都得是定义成他的,但是呢,你可以省略啊,但是书写时可以省略不学,但是它也在,咱们可以证明一下,这呢,我写一个没方法,没方法的话呢,我们这一个接口,你接口中的静态的结构呢,也可以直接通过接口来调,大家看。
07:55
是不是最大最小都能掉,你看sf static final都是这个小圆圈呢,都是表示的是public的权限没有问题啊,这个呢,相当于体现的是一个静态的一个事儿,比如我们这把它就直接输出吧,啊这呢体现的是一个静态的事,直接可以通过我们这个接口呢去调CTRLCCTRLV能调,然后呢,我们当你试图想通过这个接口,咱们点这个min,我给大家重新赋个值。
08:32
发现呢,不让你付说呢,这时候是一个final的,哎,所以说这块呢,咱们只是省略了,省略了咱们这个叫public static final了,它也有行,这个呢就不多说了,这是关于咱们说的这个叫全局常量的问题,下面呢来说定义这个叫抽象方法,抽象方法的话呢,我们说都得声明成叫public abstract。
09:02
哎,Abstract,比如说它最起码呢得有个方法叫做FLY,这呢是一个抽样的方法,没有返回值了这一个,哎,再来一个,这个能飞,他也得能够停,咱们再定一个public叫abstract would叫stop。哎,这呢叫停的一个方法,那既然所有的方法呢,都生明为public ofstract了,我呢也可以把它呢省略掉,哎,就这样子,这个呢,很显然这个方法还得设obstract,否则的话呢,你这个没有大括号了,就是吧,那既然没有大括号,它这个呢,都是一个obstract,就是也是给省略了啊,省略了public诶strict。行,这呢,就是咱们说这个接口当中,咱们目在这个JDK7及JDK7以前只能定义这两个接口,明确的说一下,接口当中不能定义其他的,尤其是构造器,这是我们写个第四个点吧,说接口中是不能定义构造器的,接口中不能定义构造器,当你试图呢去写一个的话,是public这样一下。
10:19
这呢就算是构造器的一个形式了,那我们这会看一下,说接口cannot have constructors写的呢非常清楚,说接口中呢不能定义构造器行,那接口中不能定义构造器了,意味着什么?意味着接口是不是就不可以实例化了?不可以实例化,咱们前面讲抽象类,抽象类呢也不能实例化,但人家抽象类呢是有构造器的,装央类的构造器呢,是为了让子类扭的时候用的,那这呢,它不能有构造器的,那就涉及到子类对象实例化的时候呢,这个接口呢,它的参与度就很低了,是吧?哎,就不会说呢,我们再去调它这里就显示的这个所谓的super super super呢,只是对于调负类构造器起作用,对于调接口呢,就不起作用了,哎,这个大家注意一下这个情况啊,那这个接口的话呢,既然它不能实例化了,它不能实例化。
11:26
它有抽样方法,那咱们这个接口生育完以后呢,想怎么用啊,是不是就得让它跟这个类去发生点关系啊。哎,这就涉及到我们在下边一个问题了,第五个点说咱们在这个Java这个使用当中,或者Java这个开发中。开发中我们呢,都是让这个类去实现这个接口,哎通过这样的方式呢,咱们来去体现这个接口的一个应用的价值,哎在Java开发当中,接口都哎通过这个让类去实现,呃实去实现啊,这样的一个方式呢,来使用这个实现不是继承了,继承呢叫extend,实现呢叫employments,这呢就提到这个类和接口的一种关系,叫类呢实现接口,那咱们刚才这里也提到了,说有这个叫飞机,有这个叫子弹叭,如飞机我们去实现一下,叫可以飞这样的一个接口。
12:33
这呢咱们就可以写一个class来让他呢去implement,咱们的叫flaable,诶那这样我就实现这个接口了,这呢就要实现,那实现这个接口以后,我们接口中是不是有两个抽样方法呀,那有两个抽象方法,那我们这个时候呢,相当于我们就把这个接口中的抽象方法就拿过来了,拿过来以后,那这时候呢,你相当于里边呢,定义了两个抽象方法,这就跟我们说那个抽象类有点像了,你要么呢,是不是把这两个方法都实现一下。
13:10
这时候就可以了啊,你就可以实例化了啊,要么呢,是不是你就得是一个抽象的类了,对,只能这二选一啊呃,这个咱们先把这个话先写上,这个接口呢,是通过类去实现的方式呢来使用,那这里呢,就提到了一个,说如果咱们把这个这个这个类呢,就称作叫实现类了啊说如果实现类这个重写了,或者我们叫覆盖了吧,覆盖了这个接口中的所有抽象方法,则此实现类就可以实例化,就你就可以造对象了,但是如果呢,这个实现类。那没有覆盖这个没有覆盖接口中所有的方法。
14:00
这跟咱们上午说的那个抽象类呢,其实有点像了,就是你要是把所有的抽象方法都重写了,那你就可以造对象,但是你要没有重写完这个所有的这个抽象方法呢,我们说则此实现类啊,仍为一个。抽象类。这个应该不难理解啊,像现在的话呢,咱们这个叫飞机,我实现这个接口以后,我这呢就可以写一下这个飞机飞是通过这个引擎。嗯,这个起飞,然后这块。哎,这个我们说这个停止stop,哎驾驶员哎这个哎减速停止行这呢相当于我们把这个接口中的两个方法呢,就都给就覆盖了一下,这时候大家有一个小细节哈,咱们复类的时候呢,叫重写,说子类呢重写父类了,对于这种抽象的这种方法,对于这种抽象的方法呢,咱们更习惯上呢,把它叫做一个实现。
15:11
你看这个时候这个小三角,你看明显的不是一个,咱们原来见到那个实心的,它是个空心的,点一下呢,他说叫实现了这个接口中的一个FLY方法,其实把这个实现呢,你也可以认为呢,就相当于是个重写了,那上边呢,我避开了这个词,我用的叫覆盖啊,其实呢,你可以就是要要求不严格的话呢,你就混着说就行,要要求严格一点的话呢,通常咱们说这个这是一个复类,比如说这是一个有方法体的,就是非抽象的方法,咱们呢,就重写over read,那上午呢,其实抽象类也是这样啊,抽象类里边如果这个方法呢,是obstract的,然后我们这个此类的话呢,继承福类以后,如果我重写了这个方法,这时候这个重写呢,习惯上叫实现,因为它是抽象的,叫实了。本身它里边没有东西,我们就把它里边东西给实现了一下,叫实现了,那接口也是一样,接口里边呢,它也是抽象方法了,咱们呢,诶这样implements它,然后这个抽象的方法呢,咱们也把它叫做实现,但是你要说宽泛点讲,说我就覆盖了,我这也叫重写啊,马马虎虎的也可以这样叫啊,严格上的话呢,这个官方的话呢,就实现了这个抽象方法啊,一个小细节,好这呢相当于咱们就实现了你这个接口中的两个方法了,所以呢,我就可以去造一个plan的一个对象,这就相当于你是可以实例化的。
16:34
哎,我去new一个plan,捏完以后,这个plan我就可以去调咱们这个具体的,比如说plan就简单调一下,OK,哎没有问题,行,这是说的这个事儿,那再换句话说呢,比如说咱们class,我这再声明一个。声明一个,比如风筝叫cat cat,我让他呢去implement一下,咱们这个Fla行,那么实现以后这时候呢,我们点一下,这时候当然也好了,但是我要是把这个呢去掉,只是重写了一个,相当于是或叫实现了一个,那此时的话呢,相当于你还有一个抽象方法,那这时候呢,我要是就不写了,那你只能是表明你还是一个抽象类。
17:24
哎,就这个意思,哎就这个意思,如果呢,你要是不想实的话呢,你这也没写全,那你就加一个obstract,要不呢,就像我们这个plan一样,把这两个呢都得去实现一下,好,那这呢,就咱们相当于呢,把这个接口呢,怎么去定义,以及呢,这个类和接口怎么这个发生关系,怎么去使用简单的一个点呢,我们就说了一下。
我来说两句