00:00
OK,咱们接着来讲下边的内容啊,下边这块呢,我们讲一个关键字啊,这个关键字呢,叫做abstract,或者说呢,我们把这个呢,也可以看做呢,叫面向对象的特征的第四个啊,那就是理解为呢叫做抽象性,这呢也是对应的我们这个单词或者叫关键字的一个翻译啊在抽象呢表示的是什么意思呢?诶首先呢,我们来看一下这个课件啊,课件这里边呢,我举了两个例子来,咱们呢去理解一下。第一个例子说呢,随着继承层次当中一个一个新子类的定义啊,说下类啊,变得越来越具体,而父类呢,则更一般更通用。啊,那么类的设计呢,应该保证父类呢,和此类能够共享特征,那有的时候呢,我们就会选择把一个父类啊设计的非常抽象,以至于呢,它没有具体的实例,那么这样的类呢,我们就叫做抽象类。这段话呢,是不是也有点儿抽象?哈哈,有点不太好理解啊,诶是这个意思,你比如我们现在呢,去设计一个继承的关系啊,说这个父类呢,叫做person子类这块呢,有具体的子类啊,这呢我叫官员呢,农民啊,哎,其他的这个工人呢,是吧?哎这个我们就举了很多的这个子类啊,那随着我们这个子类呢,越来越丰富,那我们在实际这个项目当中啊,咱们通常在用到这个,诶具体的这个人这个。
01:21
类的对象的时候呢,我们一般都会去选择具体的这样的一些子类的对象呢,来去创建啊,然后呢,去调用相关的方法。啊,那么这个时候呢,发现呢,我们基本上不会去创建这个负类的对象。那这样的话呢,我们就考虑说,诶,那我能不能说呢,加上一个标识,这个标识加上以后就表示呢,这个负类呢,不能够造对象了。啊,那么这时候这个标识呢,其实就是我们说的这个叫abstract。诶把它这个标识修饰这个副类以后,这个类呢,就不能够实例化。啊,那有同学会想说,那你既然呢,你这个子类越来越丰富,那干嘛干嘛还要这个继承关系呢,直接把这个父类干掉,不完了,你就直接造你此类不不得了。
02:02
或者说这时候都没有此类这个概念了是吧,就直接在创建具体这些类的对象不就可以了吗?干嘛还要继承关系呢?是吧?啊,你看我给你举好几个原因哈,第一个原因负类当中呢,呃,首先它有一些方法呢,此类确实会重写是吧,但是呢,也会存在一些方法呢,呃,你直接拿着负类的用的。所以你把复利要干掉呢,那就不意味着不就意味着你这些方法子类这块,每一个是不是都得自己写一份了。这个不太合适是吧?呃,另外一个点呢,就是你负类中有一些属性啊,此类呢,是不是也可以直接拿过来用啊。你要这块干掉傅雷,那不这块呢,还都得自己声明了吗?这是一个点,还有一个很重要的点啊,咱们前面讲多肽的时候呢,说过一句话啊,说这个多肽啊,其实无处不在是吧,在多肽的一个使用前提呢,就是基于继承性,那我这儿有个方法,这个方法的行参呢,我就是得写成一个person类型的。啊,然后呢,真正你调这个方法的时候呢,你传进来的实际上呢,是具体的子类的对象,这个方法我就这一个啊,你不管你传什么子类的对象,我都是相当于付给的person,但你现在突然要把这个负类呢给干掉了。
03:08
那麻烦了,那这块你传一个农民好,那你造个参数是农民的,那传一个官员,那你造个参数是官员的,这一堆的方法都得自己去写。这个事儿呢,也不太靠谱。所以说呢,这个父类的话呢,诶子类父类我们还是得要的,继承关系还得要在这个继承的前提下,我们这个抽象类什么意思呢?就是刚才说的只是表明这个负类呢,不想实例化了,或者说呢,表明就不要去实例化了,那我们就加上一个抽象就可以了。所以这个事儿呢,其实挺简单的啊,所以抽象这一块的内容的话呢,不复杂。OK啊,然后我们再举个例子说呢,我们现在声明一些几何图形类,比如圆啊,矩形啊,三角形啊,哎,这样的一些几何图形类了,它们有一些共同的特征,比如说求面积,求周长,那么这些共同的特征呢,我们就考虑把这些功能呢,抽取到一个共同的负类当中,叫做几何图形类。
04:01
咱们前面也做过类似的这种练习了啊,但是呢,我们在这个呃负类当中呢,我们要是写这个求面积求周长这个方法,发现呢,我们根本没有办法去写这个方法体。因为没有统一的一种方式,只能是交给具体的这个子类呢,各自呢去实现。啊,当然呢,你说我们那个复类不写吧,好像也应该写一下,因为只要你是集合图形就应该有这样的功能,只不过呢,这个功能呢,诶在子类这块呢,我们去把你父类中这个方法呢给重写了。那么负类这个方法呢,怎么办呢?呃,最后发现呢,似乎呢,你只需要保留这个功能就可以了。哎,相当于能明确一下你几何图形有求面积求周长的功能,这呢就意味着这个方法呢,你只有这个声明。啊,只有方法的签名,也就是说我们只有方法的声明,方法头啊,这个意思没有具体的方法起了。因为你也不知道该怎么去写这个求面积和求周长,哎,那么这样的方法呢,咱们就把它设计成了叫抽象方法了。啊,没有方法体,但具体的这个方法的话呢,你得让这个子类呢,他们去呃重写一下才可以啊,哎,那下边呢,还有个规定说包含抽象方法的类呢,就一定是一个抽象类啊这句话呢,我们接下来呢去解释就可以了。
05:14
所以呢,通过刚才这样两个例子呢,大家能够看得到,哎抽象类抽象方法,哎想表达的是什么意思。啊,这呢,就是我们要强调的这个点啊,其实这个说完之后呢,核心的问题啊,我们基本上就说清楚了。好,那么首先咱们看到是基于有这种继承的关系啊,我们来谈的这个抽象。所以这块呢,我们也是在代码层面呢,先把这个,呃,继承的这个层次关系呢,咱们先抛出来。OK啊好,这块的话呢,你看我们去新建一个Java class,诶不妨这块我们还拿这个人来说事啊,呃,首先呢,有这个死钝性的name啊,In型的age。啊,这点都没问题啊,那现在的话呢,我们在这个person里边呢,比如说这个构造器啊,我呢也可以去提供一下。啊,这是一个空间扩大器,那整个代餐的。啊,代餐这块,比如两个参数呢,我们都提供一下,好,接着我们再去提供两个方法。
06:03
啊,比如说这个叫方法。啊,这个我们叫这个,诶人吃饭是吧。好,这是一个啊啊public avoid啊,再来一个比如说。哎,人睡觉哎这就可以了,好这个类呢,我们提供好以后呢,接下来我们再去提供呢,这个叫哎,比如说student学生。啊,学生好,我让这个学生呢,去继承于我们这个person。啊,没问题啊,一准以后的话呢,比如说你再加个磁针形的叫哎school。哎,这样啊,OK,然后呢,我们再去提供,哎,比如说这个扩大器,哎,先整一个空餐的扩大器,调用负类的也是空餐的啊,自己这块呢,也不要参数啊,就是个这样子的啊好再来一个。啊,比如调负类这个两个参数的,那自己这个呢也加上,哎,这就是这样一个场景。然后呢,我们可以呢,针对于父类中这个方法呢,可以做这个重写是吧,比如说你把这两个呢,CTRLC啊都粘过来啊,这块呢就重写了。
07:07
哎,这个哎学生叭,如说多吃有啊营养的这个诶食物啊。哎,学生。哎,要保证这个充足的。啊,睡眠。诶这样就可以了啊好这呢,就是我们呃,之前营造的这样的一个叫继承的这样一个关系啊,那营造好这样关系以后的话呢,接下来啊,比如我这块呢,写一个具体的测试类了啊不妨呢,我就叫做这个吧,来abtract。这个单词的话呢,不太好写啊。Abstract啊,关于它的一个测试。那么有了这个继承关系以后呢,诶,咱们再说你可以创建父类的对象,也可以创建这个子类的对象。啊,这呢,比如我们创建负类的叫P1啊,你用一个person,然后呢,通过这P1呢,我们比如说调这个方法一的方法,诶没啥问题啊STUDENT1。你有一个student啊,也没啥问题,我们调E的方法呢,诶你呢,把复类中方法给重写了,那就调你自己的好,这块我们先来看一下。
08:08
那真的没个问题,没有问题啊好,那么抽象是什么意思呢?实际上我说一下抽象呢,比我们讲的继承啊还要简单一些,简单到哪儿了呢?哎,你看回过来啊,我们呢,在现有的这个副类的基础之上呢,我把这个啊类的class前面呢,加了一个修饰,就叫abtract。加上以后。啊,这个类呢,首先它就叫做一个抽象类了。这个单词呢,就是抽象的意思了,抽象类啊,刚才我们也提到了,意味着什么呢。对,意味着就它不能够实例化啊,那这个你整清楚,咱们前面讲final的时候呢,说final也能用来修饰一个person是吧,Final修饰是什么意思呢。对,那个是不能有子类是吧。对,不能有此类,这个呢,没说不能有此类啊,Student还是他的此类。啊,然后这个呢,只是说呢,他不能够造对象了,哎,所以呢,这块你看我加上以后呢,在这个位置呢,这不就报错了吗。
09:06
哎,说呢你呃这块提到了,说person呢,是抽象的,它不能够实例化吗。诶这呢就明确它的一个特点了,所以呢,既然你不能造对象,那么这个方法呢,实际上呢,就也是不应该被调了是吧,诶这块我们就给它除掉了。啊,那这呢,就是我们说的这个叫抽象类的特点好,那抽象方法呢。算方法是这样的啊,比如这里边儿有个E的方法。啊,随着呢,我们这个person呢,咱们提供的这个子类啦,越来越丰富,丰富到呢说这个呢,这块实际上呢都呃不用去具体指明怎么吃了,因为呢具体的子类呢会指明,所以这个位置的话呢,我们考虑呢,呃这个方法呢,只有声明就行,表明呢人有吃的功能。但是具体怎么吃呢,不确定,所以呢,我们把这个方法呢,就可以也加上一个叫oftract。诶,我这样就加了,那加上以后的话呢,注意这时候它会报错,因为呢,你既然是叫抽象方法了,就不应该有方法体,注意没有方法体,不是说呢,你把这个方法题里边这个代码删掉就完了,而是呢,这一对大括号呢也不能要啊。
10:08
那就这样写。这呢,表明此方法是一个抽象方法。那么这是一个抽象方法了。啊,大家你想哈,抽奖方法的话呢,没有方法体。那杨爱的这个方法呢,其实也不应该被调是吧?不应该被调什么意思呢,就是比如我们这个student这块啊。这块的话呢,你看我这块呢,把person的这个E的方法呢,给咱要重写了,但是你会发现呢,诶好像看这个变了是吧。对这块呢,其实对于这种抽象方法的重写啊,他换了一个词。对,它叫做是吧,而这块呢,这不叫over。Rise是吧,这就重启的意思,这个呢,它叫实现的意思啊。或者呢,咱们,呃,这个讲究没那么多了,咱就也叫做重写呢,我觉得也没什么毛病啊,就相当于你把percent里边那个抽样方法呢给重写了,重写以后呢,就表示啊,它是这样吃的,哎,不影响你这块调用啊,许用这块你在调E的方法时候还是你自己的。
11:11
是吧,还是你自己的真没问题啊好,那刚才呢,在这儿呢,我们看到有这样的一句话哈。说Java语法规定包含抽象方法的类呢?必须是一个抽象类。哎,这个怎么理解呢。你看我们那个person啊。诶,刚才呢,我们是先说的抽象类表示呢,不能实体化了,然后呢,说的抽象方法这块也没有任何问题,但是你看啊,我要是先说抽象方法的时候呢,那就意味我这个类呢,还不是一个抽象类呢。你看我把这个抽象呢,去了以后呢,他这时候报错了。哎,大家觉得这个。什么原因造成的呢?你可能会说刚才那个规定不满足了是吧,因为规定说了包含抽象方法的类呢,应该是个抽象类,你现在不是抽象类,所以搞错了。没问题,那再问一句,为什么会有这样的规定呢?
12:04
哎。对啊对,我听到同学说的挺好的啊,就是你看啊,这个方法呢,刚才我提示一下啊,就是这个方法呢,是抽象方法,它没有方法体,言外之意呢,这个方法就不应该被调用。啊,那你当前这个方法呢,是非静态的方法,那其实就是拿对象呢,按说呢是能调的是吧,那现在既然说不让你调了。那我就不让你有对象了。怎么就能保证这个类没对象呢?注意构造器还有是吧,比如说我把构造器给删了,你删了它还有默认的构造器。哎,所以说你去限制构造器呢,没有意义,那干脆呢,就限制这个类吧,说这个类怎么着就没对象了呢,抽象吧。抽象类没对象是吧。所以说呢,我们这个方法啊,如果是一个抽象方法,它所属的类呢,得是个抽象类,因为这样呢,你就不能够造对象了。就这样。因为它不能造对象,所以呢,你在这儿这一行代码就走不了,进而的话呢,这个方法呢,你也不会呢掉了。
13:06
为啥我说这个抽象呢,比原来还简单了呢,就是因为呢,你看原来我们还去可能造他的对象,现在告诉你对象也不用造了,原来呢,这个方法呢,还得写方法体现在告诉你说不用写了。哎,这个事儿呢,接着往下延续就行了,也就是说原来继承大家怎么写,你看还怎么写就完了。诶从这个角度来讲呢,比原来简单了是吧,好那这块呢,基于咱们刚才举的这个例子啊,稍微的总结一下啊,差不多这个抽象抽象类抽象方法这个事儿呢,核心的问题讲的就差不多了。诶,十多分钟的这个时间啊好,那这块呢,我们再来看一看啊,抽象类和抽象方法这个事儿,诶回忆一下,刚才我们说呢,为什么要讲这个抽象类和抽象方法,咱们在课件里边呢,我举了两个例子,这块的话呢,我们可以呢再看一看啊,诶这儿呢,第一个例子就对应的刚才我们说的这样一个场景。说呀,我们呢,在开发的时候呢,是不是就声明了一个叫几何图形这样一个类。
14:01
啊,这个呢,就叫几何。图形是吧,好,那么这个类的话呢,既然你是一个几何图形了,就应该有这个叫求面积。啊,这个求周长,哎,这样的方法了。诶,当然的话呢,咱们前面也做过这个例子,明显这个几何图形它不规则,我们也没有办法给出统一的求面积和求周长的方法了。所以但是呢,你要是几何图形就应该有这样的功能,所以我们这时候呢,只能。是吧,对,只能考虑。考虑什么呀?来提供方法的声明。呃,而没有办法提供方法体。啊,因为呢不明确啊,所以呢,诶此方法。啊,适合。对,声明为。哎,叫抽象方法。诶就这样的啊,包括呢,我们下边这个求周长的方法呢,也是同样的道理,好那么接着的话呢,我们去提供它的一个子类啊,比如说这个叫CIA。
15:03
哎,让他呢去,呃,记忆成于哎,咱们刚才这个几何图形。哎,这么着啊,在击掌以后。来,注意看哈。这个哎,还没完事的,这个呢,你因为是抽样方法了,刚才我们也提到了,你对应的这个类呢,是不是得表示一下。哎,抽象方法所属的类呢,你得是一个抽象类哈,哎,得这么着了,然后抽象类的话呢,该继承还得继承。啊,或者换句话说。啊,但是你看啊,我说一下抽象类啊。还真得有紫薇。你想他自己还不能找对象,还写了一些功能。当然这功能的话呢,我们说呢,里边可以有非抽象的方法的是吧,你这些方法要想用呢,不都得造对象,你自己造不了对象了,那只能造此类对象了,那原这你就得有子类。啊OK哈,所以这块我们就提供了这个抽象类的子类了,那提供了一个子类的话呢,你注意这时候呢,我们S呢,继承了这个集合图形类了,这两个方法是不是就也继承过来了。
16:02
那就意味着你这块呢,相当于是不是也有两个抽象方法了。啊,那你要是也有抽象方法呢,这个你得小心点了,要么你这个类呢。也变成抽象类,要么呢,你是不是得把这个两个方法都得实现一下。啊,所以这块呢,咱们也可以称为呢,叫实现或者叫重写都行啊。必须。哎呀,叫重写咱们或实现哎负类中的哎抽象方法。诶抽象诶方法啊好,那么下边这个求周长呢也诶同样的道理,我们把这个呢也都写一下,哎,因为具体是圆了,我们就知道呢,该如何呢去求了啊包括呢这个句型是吧,也同样的道理啊,哎,我CTRLC。V这块我们粘过来,这就是这个矩形的这个场景。诶站到这儿啊,诶这就可以了,诶这个呢,就是我们实际开发中的这个场景,就是这块你该集成集成,该重写的时候呢,诶重写一下。
17:01
啊,接着你创建此类对象就行啊,这呢是举的一种例子啊,诶我这块还可以再去举一套例子,比如说这块我们有这个叫账户哈。叫account account账户里边呢,我们还有这个叫double类型的一个叫balance。哎,这个呢叫余额。好没问题,然后呢,我们就有这个叫取钱的这个方法,还有这个叫存钱的方法。那随着呢,我们这个账户啊,越来越具体啊,比如说下边我们有很多种类型的这种账户,这呢,我们称为呢,比如说叫储蓄卡账户。哎,让他呢,去继承于我们这个account啊,还有这个叫信用卡账户。哎,他呢,去继承于。诶,我们这要看的好,那么当等等啊,下边可能会有很多的这个具体的这种账户了,随着你这个账户呢,越来越丰富。诶,你会发现呢,我们基本上也不会再去选择呢,比如说让一个用户过来说我想这个办一张卡,诶我们不会去new一个account了,因为呢,他有点太普通了是吧?诶我们一定会创建具体的这种卡片啊,你是这种储蓄卡。
18:05
啊,还是下边这个信用卡,当然还有什么这个金卡银卡黑金卡等等是吧,哎,都是具体的这些信用卡。啊,具体的这种卡片了。都是创建的这些对象啊,但是呢,这里边儿呢,生命这个属性呢,我们通过技能的方式呢,还是要用的。啊,但是你傅雷中这个功能呢,就变得越来越普通了,以至于说呢,干脆呢,你就别写这个方法体了,在我们这个此类当中啊,我自己呢,针对我这个卡片的这个特殊性,诶我自己呢,把这个方法呢重新的再去。诶,实现一下得了。所以呢,就是这样的一个特征,那副类当中的这两个方法的话呢,我们就声明为。抽象方法。诶声明为这个抽象方法,哎把这个呢,我们诶CTRLCCTRLV啊这样,然后呢,这两块的话呢,这个方法,诶我们说呢,一定得去。实现一下是吧,哎,需要呢叫哎重写或者叫实现啊,负类中的。
19:01
哎,抽象方法。我们这块呢,都给大家去哎,重写一下啊,那上面这块呢,因为你包含抽象方法了,所以这个类的话呢,也明确呢,就不要找对象了。哎,我们就抽象化诶就可以了。其实这块呢,我们这儿呢,举了一组例子,这块呢,其实又举了两组这样的一个例子啊,这呢,就是我们这个抽象的核心的这样的一个思想啊好,那么具体来看abstract呢,首先它这个概念呢,我们称为它就叫做诶抽象的可以用来修饰。是一个叫累。一个叫方法是吧,好,那么具体的这个使用的话呢,诶我们写个4.1,首先呢,叫做抽象类。哎,这个这样说吧,哎,Abstract呢,它来修饰类啊,这是一个。哎,Abstract呢,它来修饰这个方法啊好,那么来修饰类的话呢,说这个此类呢,就叫做抽象类。诶,抽象类好,那么一提到抽象类,大家第一反应应该是。
20:02
抽象类不能够。哎,对,不能实例化,就是不能够造对象的意思啊,好,那么问一句,抽象类有构造器吗?啊,那么说阳类不能造对象了,他为什么还要有构造器呢?要构造器有什么用呢?诶对,大家这块说的是很对的啊,我们这个会提供抽象类的子类,比如这个student也好,这个student构造器也好,这个此类呢,我们要去创建它的对象,在创建它的对象的时候,不管你选哪个构造器吧,咱们说一定直接或间接的要调用到负类的构造器。所以说呢,我们说,哎抽象类呢,没有构造器,哎不能实例化,不是说它没有构造器,是有构造器,只是不能造对象而已。啊,就这样的啊,所以这块呢,我们说抽象类呢。哎中哎是包含构造器的。哎,构造器的说,因为呢,子类对象实例化石。
21:04
呃,需要呢,直接。哎,或间接的是不是调用。哎,调用来到这个副类的这个构造器。因为呢,你复类当中呢,可能还会有一些这种属性啊,子类这块呢还是要用的,所以呢,子类呢,在造对象的时候呢,还是要加载你浮力一个结构怎么体现加载呢,就是调你构造器的时候呢,就加载了。哎,就这样的这个场景,诶,所以这块呢,大家要明确一下啊。好呃,接着的话呢,其实我们在刚才演示的过程当中哈,呃,大家回忆一下,我一开始给这个类呢加上抽象的时候。啊,这里边儿呢,其实是可以没有抽象方法的。这时候我是抽象类了。这里边儿呢,你看是不是没有抽象方法。所以呢,这里边儿这句话呢,就是抽象类当中啊,是可以没有抽象方法的。哎,抽象类中可以没有抽象方法,仅仅想表明你这个抽象类呢,不能造对象。
22:06
啊,那么反过来。那抽象方法。哎,我们说所在的类呢。对,一定是抽象类。这个呢,就我们刚才解释的啊,一旦你要有一个这样的抽样方法了,我们要确保这个方法不能被调用。啊,那非静态的方法不能被调用呢。那就保证你不能有对象,咱们不能有对象了,那就抽象一下。哎,就没有对象了。是吧,哎,这个大家呢,去体会一下我们这里边这个概念啊,好,那这个完了以后呢,下边我们来看一下,这个叫抽象,哎,这个去修饰一个方法啊,说此方法即为。抽象方法。没问题啊,那么这个抽象方法。哎,怎么叫抽象方法啊,就是我们这块呢,以它为例,说抽象方法呢,说只有方法的声明,没有方法体。
23:00
哎,这是它的一个从格式上来讲的一个典型的特征。那么问大家一句话啊,你说这个抽象方法啊,它是做什么用的?我们仅看这个声明能确定下来吗?对呃,建明之意,建明之意就是看这个名是吧。啊,你包括咱们写的上面这个注释一样,咱们把这个负类里边取钱存钱,还有上面这个求面积求周长这个功能是不是也确定下来了。诶,这个大家一定要明确哈。哎,包括呢,咱们看API也是一样啊,咱看API的时候,你看这块啊,咱们点这个index,比如说咱们看这个string吧。诶进来这个string的话呢,下边这个方法很多,你看我们看到这个名,看到这个参数,其实基本上你都能大概猜出来它是什么意思了,咱们也没有说一点开看源码,它这也没源码。V源码你也都都知道它大概是什么意思。呃,也就是说啊,我们这个方法呢,它叫抽象方法,这个抽象方法虽然只有声明,但是呢,这个方法的功能其实已经确定了,只不过呢,他没有方法体,相当于呢,我不知道你这个功能该如何去实现。
24:11
就好比下面上面这个求面积一样哈,我这个方法就是求面积的。这个是毫无疑问的,所以呢,你此类呢,在继承我重写的时候呢,你也得是求面积啊,你不说这块叫求面积这块呢,你里边写的是求周长的,那是你写错了。哎,我这个方法做什么用呢?很明确,只不过呢,我没有办法呢,就是指明这些细节了,这个细节呢,交给此类你去确定。啊,那就意味着我们此类这块该重启也得重写啊,啊,这块我们拉回来。啊,在这写上啊说呢这个诶抽象方法。哎,七。这个叫哎功能。对是确定的,这个呢,我们说呢,就是呃,通过方法的声明啊。啊,即可确定。
25:00
啊,就说这个抽象方法的功能是确定,只是哎,不知道如何具体实现。啊,这呢,就体现为。啊,没有防滑体。哎,就是这样一个场景。啊,这块呢,大家注意一下这样的一个问题啊好,那么这个抽象方法呢,我们上面提到一个点哈,说呢,这个抽象方法呢,它所属的类呢,得是个抽象类,那么引出来点,就是我们给抽象类呢,去提供这个子类,这个子类呢就要求。啊,你要想实例化啊,得把负类当中所有的抽样方法呢,都得实现一下。哎,如果这个子类呢,没有啊,重写抽象类当中的所有的抽象方法啊,你比如我们这个账户这里边有俩抽象方法啊,这个C,我看到如果只重写了一个,那个呢,没重写意味着。它里边还有一个抽象方法是吧,那你这个类呢,是不是就得是变成个抽象类了。诶,这块我们想强调的点是这个事儿啊,哎,我在这写一下,说呢,这个子类呢,诶必须重写啊,父类中的所有的抽象方法之后方可实例化。
26:12
哎,否则呢,哎,此子类仍然是一个抽象类。哎,因为你里边呢,还有这个抽奖方法是吧,好这块我们回过来呢,说一下这样的一个情况啊。那我们这时候这个person类呢,假设啊,我们把这个sleep呢,也给它造成是一个抽象方法了。就是诶对于普通人来讲,怎么说呢,这个我们不确定,但是这个方法呢,是确定呢,就是它叫税啊啊那么对于这个student来讲的话呢,诶我们这里边呢,把这两个方法呢,还都是给重写过了。工业过以后呢,这时候你该造对象呢,还造对象是没问题的啊,但是呢,我们要是再提供一个子类,比如这个呢,我们叫一个诶工人。Worker啊,让他呢,去继承我们的person。你看我这一写完马上就报错了,这时候大家你猜一下啊,这个为什么。
27:02
以前我们这样建来说是构造器的事儿,但现在呢,不存在这个问题。你有一个空单构造器,空单构造器首行有super空,我这块呢,我也有空单的构造器是吧,所以构造器这块没事儿,问题出在。方法这。对啊,如果你出这些问题呢,大家呢建议呢,你都得看一眼啊。说你这个worker呀,你必须怎么着。咱们学英语的时候,或者或者吧。说你或者呢,你生命城是抽象的。那就是类啊或者呢。你实现一下这个里边的这个。抽样方法。诶说的非常清楚哈,就是因为呢,你把负类中的两个抽象方法呢,你给继承过来了是吧?呃,你要么呢,就跟student的一样啊,你把这两个方法呢,都重写一下,哎,要么这块呢,你就老老实实的说,你就是个抽象类。这样就行。那这就不报错了。当然了,你说我们这块我们也可以这样,这里边儿呢,我要是实现的话呢,你比如说我out enter一下这块呢,就提示我们,我就点第一个还是俩呢都诶我就选一个吧。
28:05
选俩吧。哎,都选中这呢,这不就相当于是做了一个,哎重写或者叫实现是吧,哎,那这时候他就不报错了,如果呢,你说我这块我就整一个,那不好意思,这块你还是个抽象的。是吧,哎,那你就得这样了。Abct,那这样啊,所以这块比如我们就写一个了啊,这个工人。哎,工人啊,这个诶很辛苦是吧,诶多吃应该是吧,好这个呢,我们就写了一个,写了一个呢,那不好意思,这块你还是个抽象类啊。以呢,这个还体现为什么呢,比如说在这块我们再来一个类,这个类呢,我叫做C啊。这个我们称为它叫生物啊。诶生物类是吧,那这个类的话呢,诶我就写一个叫public。Abstract avoid叫做。这个叫呼吸。
29:02
诶OK啊好,那你这块既然有个抽象方法,那对应的这个类呢,得是个抽象类了。哎,这样类好,这呢这就没问题了,然后呢,呃,人的话呢,我让他呢去继承于。哎,咱们这个叫creature啊,因为人也属于一种生物了,是吧,人继承以后呢,这个人里边呢,就包含了一个抽象方法了。就是多了一个触光方法是吧,就是这个C里边有个呼吸的方法了啊,他这块报送你别管它啊,然后呢,这块我们接着呢,就往student顿那块去看了。学生呢?你现在继承这个person了?对,然后呢,呃,你除了person里边的两个抽样方法你给重启了,要想你能实例化,哎,那你这块还得补一个是吧,哎,Al enter一下一回车,你得把这个breath呢,是不是也得去实现一下。对啊,这块我们学过,哎,说学生啊,应该多呼吸个新鲜。空气是吧。所以咱们上海这块呢,我看最近那个空气还是可以的是吧。嗯,但是一般的好像上海应该也都可以哈,北京的话呢,这个我记得在呃,16年17年的时候呢,这个雾霾呢,是相当严重的啊,冬天呢,基本上就没有看到过蓝天。
30:09
呃,后来呢,突然呢,就是那段时间是有那个APEC会议是吧,然后突然一下子天就蓝了哈。就是比如说这个一直都是这个雾霾的这个天,然后呢,这个明天要开会了,基本上就是前一天的,在前一天差不多你就是前一天天就蓝了。所以大家当时都叫APEC蓝是吧。啊A就是政府啊,其实控制这个事儿啊,非常有经验是吧。嗯。对,以前有些专家还说了,说这个,呃,雾霾从哪儿来呢?是因为这个家里边做饭呀,这个是吧。啊,烟啊雾啊,太多了是吧,这就太扯了啊,这绝对是这个专家是吧?嗯,还有呢,说这个雾霾的话呢,就是一些金属小颗粒,说这个作用啊特别好,说这个美国呢,如果导弹打过来,它这个制导呢,就打不准了,是吧。打不准我才担心呢,是吧。啊。诶,当然呢,这个打过来的可能性几乎为零,不太可能往咱这儿打了是吧,因为中国现在已经是到这个起梁的话,中国跟美国其实再即使出现一些所谓的这种。
31:10
这个非经济层面的战争的话呢,一定会找一个第三方的小国。这两个国家是现在绝对不可能正面去冲突的。啊,因为呢,大家都都怕出现一些不可控的局面是吧。哎,所以呢,我记得我上小学的时候呢,就听过一个德国的一个专家说过一句话,哈,人家那个没有这个十哈。他说呢,就大国之间竞争,倒霉的都是小国。当时突然发现好有道理是吧?大国呢?相互之间博弈,受伤的都是小国哈。好,这个我们再拉回来,呃,这时候呢,你看这个student,诶我们呢,把你直接负类当中的啊,你间接这个类的creature里边的抽样方法呢,我们都做了重启了,所以呢,诶那你就可以呢去对象了。但是对于我们这个worker来讲呢,诶这个里边呢,其实它有三个方法。啊,就是这个从负类集成过来的啊,Create里边呢有两个,诶create里边有一个,那我们这呢,只重启了一个,剩下两个还是抽象的,所以呢,你只能还是抽象的,你要是抽象的这块呢,你想去造对象,那不好意思不行啊worker。
32:14
We。哎,你有一个。诶worker是吧,你说这块造个对象不行,那这块明确说了,说你是抽象的啊,你不能够造对象。哎,这个呢就不行。哎,就可以了啊好,那这呢,其实就咱们说的这个抽象的一个,呃,基本上就是全部的这个内容了。啊,所以呢,应该是比较清晰的这个事儿啊,就是基于我们继承以后呢,我们把代码呢又改造了,改造,然后父类呢不能实例化了,父类里边呢,会有一些重化方法,然后把这个呃造对象的事儿纯粹呢交给子类,而且呢,子类这块呢,我们让他继承父类以后呢,你要是没有把父类的抽象方法呢,给全部重写,我就给你报错。我给你报错呢,那你就说清楚,你要么呢你就重写完,要么呢你自己你也主动一点,抽象一下。
33:00
再交给你的思维去。重写这些抽象方法是吧,你再去造对象,哎,就是这么个思路啊,好,基本上说完了,但是还有两个小的内容点,咱们补充一下就行,比如第一个啊,说出呢,不能修饰哪些结构。不能修饰哪些结构是吧?那上面能修饰的就是类和方法,那你不能修饰的就是属性。对,构造器代码块啊,也就这样吧。其实你想想抽象啊,抽象就是属性。你说这有啥意义呢?你是属性不能赋值啊,还是不能咋地了啊,属性也不能不赋值啊,哎,属性呢,去修饰构造器,哎,不是哦,塞,修饰构造器。构造器,你说是不能有构造器这个大括号,那要构造器也没有用了,那子类呢,要是加载负类构造器的时候呢,里边啥也没做。或者说到底该不该做点事呢?啊,这都说不清楚了,代码块代码块修饰的,不能有这个代码块这个体,你把代块代码块这大块一删,那都没有代码块了是吧。
34:02
删光了都啊,就光放了一个OBS在这风中摇曳是吧?哎,所以这都不能修饰啊。啊,这个呢很好理解,然后接着呢,说up呢,不能跟哪些关键字共用。对这块呢,就提到了有这样的一些结构啊,咱们拿过来啊,大家呢,主要来看一看为什么。哎,其实这块呢,就是提到这个词哈,哎,我觉得特别好的就是自洽啊。就是呃,对,你不能这个abstra引入以后,有了很多规则,跟你其他这个关键字呢,使用起来矛盾,那这个语言呢,就是涉及的有问题啊对,所以这块我们发现呢,哎,他呢,这个要求呢,是自然而然的哈,就是我们可以用因为所以来解释的,比如第一个啊。说呢,不能修饰私有方法,为什么?已经私有了,咋了?诶,其实这块呢,你记得原来我讲这个方法重启的时候提过一个事儿,就是私有方法不能够。
35:03
重写。哎,私有方法呢,是不算重写的哈。还记得不?我得找证据啊。我们讲这是吧,是不是要重写嘛,清晰的在这个位置,果真是我讲课的最清楚是吧,那在这写的啊说呢,子类不能重写,父类中声明为private权限的方法。所以出远私有方法呢,不能算重写,而这个呃呃不虽如果修饰一个方法了,这个方法是一定要让子类去重写的,是吧,否则你就造不了对象了啊,那这边意思有的说,说你不能重写啊,这不算。那不有点矛盾吗?哎,那么这个呢。静态方法。这个不太好理解啊,大家想想。啊。想想我这块我给你稍微的写一下啊,比如说这块呢,你看刚才提到说这有一个,呃,咱们先这样吧,先我写一个public啊,Word的一个method。
36:07
哎,然后呢,我把这个方法呢,加上abstract了,这是抽象方法,好,这个类呢,就是个抽象类了,这没问题,这不报错啊,现在呢,刚才提到说私有化。啊,不允许是吧,哎,这个呢,就注释了好,接着啊说public啊,Obstract,然后呢,Sta avoid method。哎。说诶搞错了,诶写反了。也不行是吧,啊那这块呢,怎么解释。形态的。不能怎么着。嗯,对。对这个呢,解释呢,其实你就想静态呢,我们讲了哪些知识点,抽象呢,讲了哪些知识点,你就找他这个点跟这个点那个矛盾的点是吧。哎,就能解释了,这个点在于。诶,刚才呢,这个有提到了啊,你看我要是把一个假设允许啊,我把这个方法呢,是抽象的声明成静态了,那意味着这个静态方法呢。
37:09
本来就可以通过泪来掉嘛。而这个抽象方法呢,没有方法体,咱们说的这个方法就不能被调。不能被调,你现在静态了就能被调,那我就不能让你静态。对吧,诶,或者我们再拉回到一个最初的一个概念上,抽象方法。哎,我就简写了啊抽抽象方法呢,只有这个声明没有方法体,这个方法不能调,调方法的呢,有类可以掉。对象呢,可以调。所以呢,这块我们就不让这样的事情发生。不让对象掉,把这个类呢,生命成抽象类,它就没对象了。不让泪去掉。这个方法呢,不要静态。那就不能拿雷去掉了。哎,所以这块呢,你就不能够静态。哎,这就说清楚了啊好,这个呢,就相当于是我们讲的这个,呃,静避免是吧。
38:01
静态方法使用类啊,进行调用啊。好,然后后边这个final的方法呢。对,他俩呢,其实有点明显的水火不容啊,Final的这个方法呢,是明确的,就是不能被重写的是吧,而你obstra修饰的方法呢。是一定要被重写的,否则呢,你都不能造对象。哎,所以这块他俩就是水火不容了哈,三种修饰的类呢。对,Final修饰的这个类呢,不能有此类。那你这个抽象类的话呢。必须要有此类,否则的话呢,这个你也造不了对象,那你有何用呢。面向对象对象掉,你自己造不了对象指令,那还不能有。那还不如死了算了是吧?所以那就不行是吧,诶所以这块呢,这个跟他们就不能够共用了啊。OK,所以这些点呢,就是自然而然的啊,大家呢,在写的时候呢,你发现呢,一写诶他不允许啊,你想想哦,对不能共用,哎,知道这个事儿就可以了啊,就是一个自洽啊。
39:05
好,那这样的话呢,咱们关于抽象呢,其实就讲完了啊。
我来说两句