00:00
那么接下来啊,咱们来说一说抽象类啊,抽象类的这个东西呢,一开始给大家的感觉可能会觉得它没有什么多大的意义啊,或者说好像完全没有必要,但是实际上当我们把这个类的代码写的多了之后啊,就会发现这个抽象类还是有很大价值的啊,比如说呢,我在这举一个简单的例子啊。比如说我要是有一个动物的类。那动物的这个类可以作为副类来使用。那它还可以延伸出来一些子类,比如说狗啊,猪啊,鸟啊是吧等等等,这些都是属于动物的子类。那在动物类当中,如果说我来了一个方法,或者说一个行为,比如说叫做跑啊,或者说吃啊是吧,那么我们最好的方式是什么?他有吃的方法,但是吃的方法里边不需要写什么具体的实践内容。为啥呢?如果你要写了,那你说动物该怎么吃呢?怎么吃才能够形容所有动物吃呢?是吧,也不太合适,但如果说要是呃,小猫啊,小狗啊,小猪啊这些吃他们吃的这个行为的方式是不一样的,所以说像这种情况啊,就出现了抽象类或者抽象方法的这些概念,那这样呢,咱们通过代码的方式实现一下,这个代码写完之后呢,大家就会觉得诶,抽象类还是很有作用的,是吧,那我们来看一下啊。
01:17
在这里边新建一个文件,这个是零八杠。抽象的点TS。然后呢,m.tS当中在这个位置。注释掉。N point,然后再来一个什么呢?点杠,这个叫做抽象类,保存一下。好,第七个我就去掉了啊,我们说的是抽象类,抽象类其实抽象类当中啊,包含抽象方法。而且呢,抽象方法。一般没有任何的这个具体内容的实现。那么还有包含抽象方法,逗号也可以。
02:04
包含什么呢?实例方法。逗号,而且抽象类是不能被实例化的。诶,那它的作用是什么呢?是为了让什么呢?子类进行实例化,即实现内部的方法。内部的抽象方法啊,那我们来看一看啊。它并不复杂啊,比如说我们要定义一个类是吧,然后呢,来一个class,诶看。Class class,再来一个什么呢?Animal是吧,这是一个普通的类。那么我们要想把它变成一个抽象类,只需要在前面加上一个abstract就可以了,那我把这个词呢,复制过来,直接放到这来啊,那此时注意我定义的是一个什么呢?抽象类。
03:00
啊,抽象力当中可以有抽象方法。然后呢,也可以有实例方法,我们来看一下抽象方法,直接在这加上abstract,然后呢,再给他来一个什么呢,这个方法的名字就可以了,比如说呢,我们说吃。对吧,好。但是呢,我们不能在这里边直接给他写上这些实现的内容啊,真好吃是吧,让我们来看一下,此时呢,他说方法eat不能具有实现,因为它标记为抽象了,所以抽象的方法里边是不能写具体的内内容了,是吧?而且呢,大家想这是一个animal动物类,那将来呢,我会给他来一个子类啊,子类继承自这个父类,继承了一个抽象的父类。那么如果说我在这个吃里边有具体的实现内容是吧,我说嗯。趴着吃。或者说跳着吃。是吧,我用这种内容来形容动物吃都是这么吃的,那我们想狗也是动物,猪也是动物,鸟也是动物是吧?那他们要是吃的话,是趴着吃吗?不是,有的可能飞着吃,有的可能跳着吃,有的可能是走着吃,还有跪舔是吧,等等等,所以说抽象方法里边是不能有具体的实现的啊,所以说呢,这个位置我就把它干掉了啊。
04:21
重新写一下,这个是报错的抽象,抽象方法不能有具体的这个实现啊好,那我在上面重新写上一个abstract,然后呢,来一个eat啊,就是有吃的行为,但是呢,具体行为我们不说是吧,它还可以有实例方法,再比如说什么呢,他跑吧。Cano.log,是吧?啊,都跑了是吧?那这种方式大家再想一想啊,说我在这给了他一个实例方法就跑,那你说动物都都怎么跑啊,都是跳着跑合适吗?也不合适是吧?那有的动物还可以飞呢是不是?所以说如果要是我给了一个run的方法名就代表跑的意思的话,直接把内容实现了也不太太也不太合适是吧?哎,所以说我给它改一个名字啊,咱们别都跑了,说来一个c hi吧。
05:15
这什么意思?动物都可以和动物之间打招呼是吧?啊,动物之间打招呼怎么说的?啊,我就抽象一点啊,你好吧是吧,你好啊,我就这么写了,这块主要是给大家去演示一下啊好,那现在呢,上面是一个抽象类是吧,我做的第一件事情就什么呢?我要实例化抽象类的对象。直接来下一个cost,比如说a ni冒号animal的是吧,等于new animal,然后我们看它报错了啊,为什么我们来看一看,说无法创建抽象类的实例,所以说到了这儿啊,是不能实例化抽象类的对象的,或者说抽象类是不能被实例化的啊,那怎么办呢?怎么用呢?是吧,好来看一下啊。那么我在这个里边重新写上一个类,定义一个子类,或者说叫做派生类啊,这都行,谁呢?叫dog吧。
06:10
Class。Dog,然后extend extend后边再来一个animal。好,现在啊,我们来看do报错了。说dog已声明但从未使用过,这正常,因为我还没写完是吧?说非抽象类dog不会实现继承自animal类的抽象成员E的,什么意思呢?说我这里边儿有个animal的抽象类,是一个负类。那里边儿有一个抽象方法,这个抽象方法既然你们两个已经发生了继承关系,那你必须要帮我去干嘛呢,实现它。诶,大家看这样是不是就没有报错了吧?哎,Cano.log胯狗是怎么吃啊啊舔着吃。啊,真好吃。好搞定是吧,好,那这个时候我们再来看啊,我在这儿实例化。Dog的对象,看的dog,冒号dog等于new dog。
07:06
然后呢,我也没写什么名字,什么东西啊都没有了,Cano啊,就直接来一个dog点什么的。然后呢,此时我们保存打开界面。刷新一下,我们来看舔着吃真好吃是吧?那这个方法是他的吗?不是,这个方法是负类对象啊,负类animal当中的一个抽象方法,只不过是在这里边做了一个实现,相当于是重新的实现了一下是吧?这个叫做重新的实现抽象类中的这个方法,那当然了,此时这个方法就是。就是当前什么呢,当前。Dog类的这什么实例方法了啊,自己的好,那它里边有c hi可不可以调用呢?do.c hi我们再来看一下。你好啊是吧,也是有的是吧,但是注意啊,这个C还调用的是谁呀?调用的是抽象类中的什么呢?实例方法,那我们再思考一下啊,那我在这里边可不可以有抽象的属性呢?是吧?Abstract,比如说我来一个name,然后来一个。
08:15
好,我们来看一下可不可以有啊,也可以有是吧,那这个name大家大家来看啊,这是一个抽象的属性是吧?那现在这个name是没有值的,我可不可以给他一个初始值值呢?初始值小甜甜。诶,可以是吧,没有问题是吧?好,那这个时候我们看dog里边非成员类dog不会实现来自animal类抽象的成员name,这是什么意思呢?里边有个name是吧?你也应该把它实现了,那我怎么实现呢?无非就是把这个name放在这儿,然后给它来一个搜串。然后呢,再给它来一个值啊,比如说小黄诶搞定了是吧,有没有报错了是吧?好,那注意啊,我就把这小填去掉,我们来看看啊,在下边canl.log括号这个dog.name保存一下。
09:00
诶,小黄也是有的是吧,好,所以说这个时候啊,也是需要大家注意一下的啊。它我把它注释掉啊,这个呢我也注释掉,这行代码呢,我也注释掉啊,没有必要在抽象类当中来一个抽象属性,然后让子类去实现啊,我们很少会直接这么去写代码,这个是抽象属性,所以说抽象类当中的成员啊,包含抽象方法,实例方法也可以包含什么呢?抽象属性,但是我们抽象属性的这种写法不会特别多,或者说暂且不会那么多啊。刚刚咱们讲的是抽象类,抽象类的目的是为派生类而存活的,抽象类的目的或者是作用啊,最终。都是为什么呢,子类服务的啊,好保存一下啊。
我来说两句