00:01
好的,接下来我们来继续来说啊,关于继承里边还有一个非常重要的东西啊,我们在这儿创建一个新的TS,我们叫做一个soup,哎,就是TS,那这个时候的话,我们来说一下这什么意思呀,我们都知道叫做超级的意思,对吧,超级的意思,那这个的话,其实呃,我们说这个负类,实际上还有一个名字,负类的话,我们的名字也叫做超类啊,超类,所以so的话,实际上在这儿它就代表的是一个负类,举个例子啊,我们还是整这个东西来一个class。ANIMAL。Class一个这个animal animal里边呢,我们简单一点啊,我们就来一个这个name属性,哎,Name的类型呢是string,然后呢,我们来一个constructor constructor name,我们来一个string string,然后在这this.name等于name这来一个say hello。
01:01
C hello,来一个cancel点儿log log来一个,哎,这个大家好,诶这个这个是动物在叫吧。好,写这么一个东西,然后写完了以后呢,我们现在创建一个dog类去继承它啊,我们直接来一个class,哎,一个dog,我们直接写一个expense,一个这个animal,继承它以后的话,我们说了它这里边的东西我们是不是就就都有了,哎就都有了,那这个时候的话,我们创建我们去调用一个,我想去重写一下这个c hello,诶你看啊,当我去重写这say hello了以后的话,我们这写了一个say hello,它里边会自动写一个S,这个S表示什么意思,你就记住了,就完事了,So就表示的是我们这个哎表示的就是我们这个负类,表示是就是我们这个负类。哎,在我们这个类的这个方法中。我们这个so。
02:01
诶,就表示我们这个当前类的一个负类啊,当前类的负类,所以这个时候你看啊,当我写一个c hello c hello里面调了一个什么,调了一个so.c hello,这so你就可以当成是负类,或者你可以当成是负类的实例都行,那这样的话,其实等于说我再去调用new dog的时候,实际上就是在调用super hello,我们看效果啊,看效果直接来一个constant,我们来一个这个dog,等于一个拗一个dog,拗一个dog的话,因为我们只设置了名字,我们就直接来一个旺财。然后呢,在这儿我们直接来一个到个点一个c hello。然后呢,我得改一下这个东西应该是零四了。刷新一下,走一个动物再降,你看它这掉的是so.c hello,实际上是不是就是掉的这个东西,哎,所以s.S你就当成是负类就行了啊,所以s.c hello实际上就是在调用我们这个负类的c hello,所以当我们去用到继承的时候,我们继承一个类的时候,比如说我在一个这个类当中,一个子类当中,我想去引用这个父类,或者说引用父类的实例怎么办啊,那这里我们就可以直接用这个so去引啊,So就代表的是当前类的一个副类啊好,那这是一种演示方式,那你不想引用它,那你给他住了就行了,不想引用它你住了,你直接来一个cancel.log,来一个汪汪汪就行了啊,汪汪就行。
03:33
然后这一保存刷新一下。作为一个,哎,就这么一个效果,那他这个东西啊,在这儿用的情况倒其实没那么多啊,没那么多,那主要什么时候会用,举个例子。诶,比如说啊,之前我们去做这个继承的时候,我们只是往这个类当中添加一些新的方法,那有一些情况,像这种情况我还想添加一些新的属性,诶仅有name我觉得不够了,那我还想整一个什么呢?我还想整一个这个age属性,Age属性的类型是一个number啊,Age属性类型是一个number,但是呢,你整完属性以后,你是不是要对属性进行初始化呀,你要对属性进行初始化,那么你就得必须得调用创建,调用什么呀,调用这个构造函数去创建,那这个时候问题又来了,你注意啊,如果我不这么写,你看啊,如果我光写一个空的构造函数里边我传一个H来一个这个number number的话,我这直接来一个z.H等于一个H直接赋值,还会有错,为什么还会有错?
04:38
我们这个构造函数不是已经写了吗?这个值我这不已经负了吗?为什么还会有错?我们把鼠标放在这儿。哎,你看啊,什么这个叫做什么呀,诶constructor这个必须的嘛呀,包含这个这个口啥意思啥意思啊,注意了,如果我们这个在子类中写了这个构造函数。
05:03
写了这个构造函数,因为我们之前说过一个问题,我们名字相同的函数,它是不是会发生这个这个重写呀,诶重写,所以这个时候当你写了一个构造函数以后,那等于是你把负类里面那个构造函数给是不是给覆盖掉了,那就意味着说负类中的这个构造函数它就不会去执行了,负类的构造函数不执行,那你这个内幕属性这个负值。这个操作是不是就没了啊,就没了啊,所以注意,如果在子类中写了构造函数,那此时我们这个在子类的构造函数中。诶,我们必须对负类的构造函数进行调用,如果你不去调用,那这个时候它就会出出错,你这个继承就没有办法正常去实现,所以之前我们没有写砍,为什么没写它也行,因为它自动掉了,因为你没有发生重写嘛,它就自动掉了,但是现在你写了C了,那你这里边必须得去手动的去调一下负类的构造函数,怎么调负构造函数非常简单,直接so加一个括号,那这就表示谁,这就表示说是在调用负类的构造函数,但是这为什么还有下划线,还有这个波浪线,哎,因为负类的构造函数里边是不是有一个name属性啊,而这儿你是不是没有那个参数啊,所以就报错了,所以我写的时候呢,我得把这参数啊,也得写这name,我们来个string,然后呢,你把这name给它传进去,那这个so,这就是在干嘛,这就是在调用我们这个负类的构造。
06:42
函数如果你不写这个G就不行,语法错误啊,语法错误,所以等于说这个你可以理解成是我们这个这个这个这个TS或者GS给我们遗留的一个问题,其实稍微的有点麻烦,但是你就记住了,我们必须得这么写,你必须你在子类的构造函数当中,必须把父类的构造函数再调一遍,才可以确保我们这个继承的一个正常,当然你这调完了以后,你这构造函数需要两个参数,你这现在是不是只传了一个,诶那你可以在这再传一个,传一个什么呢?哎,传一个这个来三吧,这便写一个,这样就齐了啊,这样就齐了,好,那这个我们主要说的是一个so这个关键字啊,记住结论就行了啊,So代表的是我们当前类的负类,最关键一点就是在子类的构造函数当中,必须得调一下负类的构造函数,不然我们这个对象初始化完成不了,会导致我们这个继承出问题啊,出问题好,我们还是停一下。
07:42
嗯。
我来说两句