00:00
嗯,那么我们现在把这个抽象类的基本语法刚才已经说过了啊,说过了,那么我们说明一下抽象类的价值,在面试的时候,有些人哈,有些面试官特别喜欢问抽象类有什么用啊,抽象类有什么用啊?抽象类呢,你们在做开发的时候,其实很少发现有人在用抽象类,可能用接口的比较多是吧,那你你这个抽象类好像没有没有什么价值,但是实际上抽象类还是有用的。什么时候有用呢?它的价值更多的是在于设计啊,什么怎么理解这句话啊,什么叫做更多在于设计呢?它是这样子的,就是将来我们在开发中呢,有时候你作为一个管理者,比如说你是项目经理了,你下面管了五个程序员,那么五个程序员呢,每个人都有自己的一个111个编写代码的风格,你怎么来管理它呢?你可以这样做。我去抽象一个类,然后呢,我交给相关的开发人员,让他们用子类继承并实现,这样呢,在一定程度上我们就可以去控制我们这个代码的一些规范和把控我们这个程序的一个结构,好所以说呃,所有的这个呃书上呢都会说抽象类的价值在于设计。
01:20
就是说它更多是站在设计层面来使用这个抽象类的啊,好,这是我们对它的一个作用的说明,那下面呢,我们来看看抽象类的几个细节啊,把这个细节搂一圈以后,大家用起来就不害怕了。第一个抽象内不认实的话跟Java一样。Java抽象内也不能持续化,第二个抽象内不一定含有这个抽象的方法,也就是说抽象类可以没有抽象方法。这是可以的,那么写段代码。来,我们写我们抽象类的细节描述问题。那么abstract abstra,抽象类的细节detail,零一。
02:05
好,来,走一个。啊,那现在呢,我在这里写一个主方法。然后我们写一个类啊,Class。Class,比如说我们这有个animal animal,呃,零二。零二,然后呢,我把它标记为抽象类开始了啊,同学们看到。我们现在一个抽象方法都不写,我们就写一个已经实现的方法,可不可以,可以的DFC hi。你看同学们看,一样可以用,一样可以用,也就是说在我们抽象类中呢,是可以有实现方法的,在抽象类中可以有抽有有实现的方法没问题,好,这是第一,这是要给他说的这个问题,再来看第二个。啊,我们把这个细节呢,干脆一边讲一边截取小视频啊,OK,好,这是它的细节标记为第三一个,标记为第三一个,对不对?哎,那第一个呢,我们说不能实例化,这个我就不举例了。
03:12
啊A不举例了啊,但是这个不能实例化呢,也要看你怎么做。说老师抽象那真的不能实的话呢,也可以,你要说你要说完全不能呢,也行,用匿名的方式也能实现,我多说一句啊,我多说一句,有些同学说老师我也看到人家实现了,比如说啊,比如说同学们看。在这个SC里面呢,假如我这有一个这样的抽象方法,注意听obstract啊抽象类,那么class animal。ANIMAL03。那么我这边有个抽象方法。DF,比如说这个叫C哈C哈,好,这边我什么都不写。啊,是一个这么一个方法,我是什么都不写,那么这个animal肯定你直接这样去实例化,它是要报错的,Animal你直接样实例化肯定报错,说老师我这样子就用它这个默认的一个构造器,这个肯定不行的,它直接告诉你啊,就是这个类is是一个up cannot be,这个it就是不能够世界化,但是呢,如果你这样写也是可以的,说老师我这样写行不行。
04:20
看啊,注意看animal。诶,这个写错了,ANIMAL03。哎,说我在这个进行实例化的时候,同时动态的将它c hello进行实现,可不可以,这就可以了。哎,这也是可以的,说C哈,这个就没问题,其实这个就相当于我们的一个匿名子类是吧?啊匿名子类就相当于,因为你这个没有实现嘛,那我就动态的给你实现,这也是可以的啊,这样子也是可以实现啊,就说如果这样说啊,呃,默认情况下,默认情况下一个。
05:02
一个抽象类,抽象类是不能实例实例化的,不能实例化。实例化的,但是啊,但是如果你但是啊,但是你在实例化时同时实现了它的抽象方法。也可以,但是你实例化,室实例化,史实例化,使动态的,动态的实现了,实现了抽象类的所有所有抽象方法。啊,所有抽象方法,哎,也可以,那就是如下。那么我们来运行一下,看行不行?animal.c hello,你看我这就写了这么一个,它已然可以跑起来。诶,你在Java里面呢,这样子也可以的看OK,好这这个也是OK的,那就是我们把第一个呢,呃,把第一个这一块呢,也给大家写到这吧,这是我们第一个案例啊,默认情况下不能式的化,但是你要动态的实现方法呢,也OK。
06:08
第二个。我们把第二一个刚才的这个案例也给大家写到这里来,第二个案例我们是哪一块呢?是这一块。哦,是这块。对吧,抽抽象内容可以有实现的方法,也给同学们板书到这里。好的,我们来看抽象类的第三点,一旦类包含了抽象方法或者抽象属性,则该类必须声明为抽象的。这个我就不讲了,同学们以前在学Java的时候,老师应该讲很多。对,你第三个细节肯定大家都是在Java里面说的很清楚了,第四一个同学们看一下,第四一个是抽象方法,不能有不能有主体好,这个也很简单,不再举例,第五一个,第五一个说。来看这里。好,第五一个就是说,如果一个类继承了抽象类。就有有一个类继承的抽象类,那么它必须实现抽象类所有抽象方法或抽象属性,注意带了一个抽象属性啊,这个抽象属性的概念在Java里面是没有的。
07:11
那么没有的,除非他自己也声明为抽象类,这个我举个例子。这边多了一个,就是以前多了概念,叫抽象属性,那么我给大家进行一个简单的演示来吧,我们直接在这里写,比如说现在我有,我就以这个为例。我就以这个为例,那么这里面我还再搞一个抽象属性,再搞一个抽象属性,比如说它是什么呢?它一个number,它有个food啊,Food到地方呢,是一个始终类型的。然后animal喜欢吃的食物,好,写完了。诶,大家看这是个抽象方法,这是个抽象属性,比如我在这里有一个类叫什么呢?叫猫猫cat,那么我让他去继承animal。我让他去继承animal,好,当我这样做完以后呢,它会提示是错的,原因就是这两个没有实现,那怎么办呢?把光标放在K的屁股后边,输入alt加。
08:12
Enter键。他会说。好两个让你选择再看一下怎么出来的啊,把光标放在开头后面,输入alt加enter键,它会提示你,这这我少提示了啊。好,再来一下。诶,这怎么不见了呢,那个。这这这还还很讨厌哈。哎。我换一个动物dog,换一个狗啊,换一个狗,换一个狗,那你看这个换一个狗就好了,猫不行,猫不行,我也不知道为什么我不去研究这个啊好来吧,我们OK一下,诶大家看,那么在scan里面它这样子的啊,它的方法题呢,会有三个问号给你写到这儿,那这个时候呢,你把它写进去,我我说出一句话就可以了,就小狗啊,小狗汪汪叫。
09:06
啊汪汪叫O了,好,这就实现,那下面这个呢,也叫实现,其实准确的讲啊,这个overright可以拿掉,你拿掉也是可以的。那这个是可以,你保留也可以,好,这个就看你的习惯吧,就看你个人的习惯,好,我把这写到这里啊,写个什么呢?就是刚才我们讲的这个细节来吧,把这个运行起来,当然这个时候do就可以实际化了。这已经实现了它的抽象方法和抽象属性,当然可以实例化,好,这个我就不多说来,放到这里来。给同学们发我们的第551个细节。第五个细节,好,紧接着我们看,呃,抽象的第六个抽象方法和抽象属性不能用private final来修饰,因为这些关键字都跟重写或者实现相违背。嗯,你你假如一个方法是私有的,抽又是个抽象方法又是私有的,你想想。
10:02
那谁在谁在帮你实现,那必然是错的,你比如说同学们,假如我在这个地方加了一个私有的,那显然这个地方语法肯定是要报错。啊,肯定肯定报错private,因为这个从逻辑上讲不通了,他讲不通你私有的下面没有机会来进行重写或者叫实现,那你这个就就没有没有没有机会了,好所以说这个大家注意,诶我再问大家一个问题啊,同学们,我这个可以去掉over right请问。我这个override能不能去掉?我就跟他们去掉,实际上本质它是overright的这个c hello还是实现。本质上这个c hello是实现它还是重写它实现它?因此这个方法你们觉得把它拿掉可不可以,其实也是可以的。你看它这个线箭头没有没有给你拿掉,像这个箭头没有去掉,所以说嗯,这个地方反正它自动会给你加上,其实这两个都是可以不要的啊,可以不要的,没有任何问题啊,我这多说一句,多说一句好,刚才我们讲到的这个就是呃,这个私有final,你也不要去修饰啊,原因呢,我也做了一个解释,好把第六一个给同学们放到这,我们现在来看第七个。
11:19
注,抽象方法可以有时间的法,这,这抽象类可以有时间方法不说了,再有此类重写抽象方法时,呃,不需要override,写上也不会报错。刚才呢,这两点我在案例里面已然体现出来了,好,把这个写到这里来。好,同学们这个就OK了,那到此呢,我们把这个抽象类就说完了,也没有太多要说的,因为同学们呢,以前已经学过这个抽象类了,好,我截取一段视频。
我来说两句