00:00
好了,接下来咱们就具体说一说Java中抽象的相关语法。首先我们先说一下抽象方法,什么样的方法才称之为抽象方法呢?从语法上来讲,只有声明而没有实现的方法就称之为抽象方法。说一下。只有声明他没有实现的方法,这个方法呢,我们就称之为叫抽象方法,还是咱们前面提到的游戏玩的好,那你说怎么叫好,我不知道,反正就知道是好啊,所以呢,它的语法呢,是这个样子的,写上一个叫abstract,然后咱们叫返回值类型,然后方法名,然后写个括号,然后写个参数就可以了,写到这个位置的话,我们的抽象方法就声明好了,我们这里的abstract呀,它其实就是抽象的含义啊,那么我们这里呢,给大家举个例子,我写上一个class。我叫person啊,21好了,翻过来,那么我们的人呀,他要吃东西啊,那么吃东西呢,我们这边会有一个方法,咱们叫public,然后呢word,然后写成一个it,对吧?好,这么写,你这么写完了以后没问题,但是我们吃东西的方式不一样啊,同学们,中国人是用筷子,欧美人是用刀叉,那么印度人是用手抓呀,所以有很多种,你无法准确定义出我们这个人应该用哪种方式来吃东西,所以既然无法定义,他就应该是抽象的,对吗?他如果是抽象的话,按照我们的要求,我们就需要在它前面加上一个我们的抽象的关键字,所以在我这里加上一个abstract,你写完以后这个大括号是不能加的,诶,我们给它写上它就可以了,但是你有没有发现我们的类的上面,包括这个都标上了红线,什么意思啊,很简单。
01:38
方法呀,是类的一部分,如果整体的一部分无法定义,比较模糊,它不完整,那么整体是不是也可能是模糊的,它也不完整,对吗?那么这个类其实也应该是抽象的,我们不说了嘛,抽象类吗?所以我们说一下不完整的类就是抽象类。所以啊,我们抽象类的语法呢,跟我们的抽象方法还是很像的,也就是说我们也是用这个关键字来我们复制一下,复制以后写上一个class,然后写上一个类名就可以了,所以呢,我们就需要在它的前面给它加上一个abstract关键字,你这么写就可以了,说明啊,我当前的类是不完整的,我们当前的方法也是不完整的,哎呀,那既然不完整的话,那这个类你怎么构建对象呢?其实这个咱们就要说一下了,我们抽象类是不能够构建对象的。
02:33
因为我的类不完整,所以无法直接构建对象。对吧?那好,我们来拷贝,拷贝以后我们的PERSON21等于PERSON21等于new,把这个我们拷贝过来,拷贝过来以后来同学们你会发现你根本就无法构建这个对象,你鼠标放上去,它会提示你,我们抽象的类是无法实例化的,这就好比啊,咱们之前举的那个例子一样,你看见了一个模糊的影子,你能知道是谁吗?不可能,对不对,所以啊,它当然就无法知道它具体是什么东西了啊,如果一个类中啊含有抽象方法的话,那么这个类是抽象类,而抽象类是无法构建对象的,我们刚刚演示过了,不过反过来是不成立的,什么意思啊?如果一个类是抽象的,但是里面的方法一定是抽象的吗?不一定那么好,把它注掉,注掉以后,我写上叫做public,我写上VO叫做test,你这么写没有任何的问题,诶老师这是为什么呢?我说过了你的部分啊,它不完整,那么你整体是不是就不完整啊,同学们能不能明白,诶就是这个意思。
03:36
所以呢,从这个角度来讲的话,我们的一个类中有抽象方法,那么这个类就是抽象类,这是对的,所以咱们这里写上它。如果一个类中它含有抽象方法,那么这个类它是抽象类。但是反过来,如果一个类呢,它是抽象类,那么它里面的方法不一定是抽象方法,那其实啊,这个也好理解对吧,就好比我们学习的时候,老师的每一句话,每一段大脑我都明白,但是你把它合在一起了,我们怎么就懵了呢?对不对?诶就是这种感觉啊,哎呀,那类定义完了以后,你不能构建对象,那你怎么使用呢?
04:18
诶,这就需要将我们的模糊的东西不断让它变得清晰,变得更加具体,而这个过程呢,我们是通过继承来完成的,就是说把抽象的东西让它变得具体,用我们的子类来继承它,来把它补充完整就可以了啊那么这里我们就创建新的类,我写上class,我叫Chinese,然后呢,写成一个21好了,写完了以后,我的Chinese就是个人呢,那所以我就继承我们的person,诶,写个person,你这么写就行了,21好,那么你写完以后同学们记住了。这个CHINESE21,它就等同于继承了我的抽象类,把它补充完整了,那这时候你创建对象是肯定没问题的,所以呢,我这里来,我写上一个C,它等于new Chinese没有任何的问题,诶老师呀,那你要这么做的情况下,它被创建出来了吗?我们说没问题,还记得咱们之前给大家讲过的一个叫super的关键字吗?那个关键字就可以把我的负类对象构建出来,也就意味着抽象类没有办法直接构建对象,但是可以通过子类间接的构建,所以咱们这里写上。
05:25
我们的抽象类,抽象类它无法直接构建对象,但是可以通过。子类间接构建对象。对吧,咱们讲过这个事情吧,诶,所以这个也可以,它就是把模糊的东西变成具体的东西,其实你的模糊它也是个东西,只是你无法确认而已,当你有了它以后,你不就确认了,对不对,不就是这个道理吗?所以我们这么写没问题,但是呢,还有一个小细节,我们刚才不是有个叫抽象方法吗?你这个抽象方法的话,大家看一下你这里还会报错,为什么?因为我们这个方法并不完整,你当前只是继承了这个P21的类,你并没有把方法补充完整啊,所以这里我们也要说一下,我们如果抽象类中。
06:14
还有我们的抽象方法。那么此类继承抽象类时,它需要重写抽象方法。将方法补充完整。它得这么做,所以呢,我们这里把它拷贝过来,拷贝过来以后来把这个呢,我们去掉就行了,去掉然后呢,把它补充完整,补充完整以后,我们就写上它来放过来,我们写上它中国人啊使用筷子啊示范,诶我这么写就行了,对吧?那如果呢,是我们的美国人或者那个欧美人是吧,他就是用我们的刀叉了,那么我们的印度人可能就是用手抓了,我们这里就不说了,写上c.it好了,我们现在运行一下,看结果,运行运行以后看结果,你会发现应该是没有问题的,对吧?中国人使用的就是我们的筷子吃饭,这不就可以了吗?对不对?好,我们继续呢,再往下说一说,那么我们前面讲过一个语法,我们叫做final,大家还记得吗?我们前面讲过,Final修饰的方法是不能被重写的,那么也就意味着,如果你加上一个final怎么样呢?
07:22
大家会发现我这里就不对了吧,哎,为什么呀,其实很简单,因为我们的abstract它是抽象的,它是不完整的,如果要想用它的话,就必须把它补充完整吧,也就是说必须要有子类来重写它,但是你的final呢,就不能有子类,那么你这个方法就不可能有任何的实现了,那从语法上来讲就会有冲突,对吗?所以啊,我们的abstract是不能跟final联合使用的,所以咱们这里补充一下。咱们的abstract啊,关键字,关键字它不能和final同时使用。这个呢,是我们需要给大家去介绍的啊,所以这个不能用,不光是这不能用,大家还记得吗?我们的class不是也能够加上final吗?诶,就是这样,你加上以后它照样不对,为什么不对?因为我们的abstract它是抽象的类,它必须要有子类来构建对象,但是你加了个final之后,我们的类没有子类了,那不又产生歧义了吗?所以从这个角度来讲的话,我们这他也不行啊,所以把它去掉,所以final也不能修饰抽象类啊,这里呢,我们就注意一下就可以了啊。
08:30
所以我们的抽象类也不能使用final修饰,我们的抽象方法也不能使用final修饰,这个大家知道就可以了啊,好了,同学们,我们的这个抽象类和抽象方法咱们就讲到这里。
我来说两句