00:00
那么将在本小节开始,我们为大家讲解一下面向对象的第二大特征,什么特征呢?继承进一个文件,面向对象三大特征写一下面面向对象三大特征横线我们写的是继承。好了,要学继承之前,我们就得先了解一下到底什么是继承吧,是不是?其实这个词在现实社会生活当中,我们遇到的并不少,继承我们一般情况下,比如说啊,我们可以说继承什么呀,继承父母的愿望,是不是继承父母的愿望啊。你爸妈希望你做医生,哎,结果你就照着这个路子走下去了,继承父母的愿望是不是,或者继承父母的财产,父母的财产是不是,这些东西都是什么呀?现实社会中的继承是不是包括我们看的电影游戏里面其实有很多继承,比如说什么呀,我们看那个火影忍者对不对?那火影忍者中名人他说什么呀,他是不是要继承火的一致啊,是不是?所以继承是不呀,火的一致是不是?
01:09
火什么火啊,火的一志,那意志啊,那其实这也是一种继承,这也是,就是,也就是说我想获得其他人有的某一个东西,是不是啊,这就是现实中的继承的一个说法。当然我们在计算机中呢,面向对象这块也有一个继承,那计算机中的继承应该是怎么说的呢?好,计算机中的继承啊,也很简单,你想想我们既然是在面向对象这块讲的继承,而面向对象有什么东西呢?面向对象就一个类核对象,然后类核对象里边有内容呗,是不是?那你想获取东西,获取东西获取的是什么?那不就是类核对象的成员吗?除此也没别的。所以什么是计算机中的继承呢?计算机啊,或者叫做面向对象吧,面向对象中的继承就表示什么呢?空叫做一个类啊,或者是对象或者是对象或者对象获取另。
02:10
Y,一个类的什么成员的的一个格式或者一个操作吧,啊,当然这里边别写对象吧,咱就说类吧,因为继承确认类和类之间的关下一个类获取另一个类成员的操作就叫做继承啊,当然也不是所有啊,并非所有成员,这个要了解一啊,并非所有成员,所有成员也是继承,你可以继承一部分,并不一定都得都能拿过来啊好,那这个我们介绍完了之后呢,接下来呗,想学继承就得先学两个继承相关的概念啊,继承相关的两个概念,相关的概念啊,这个现实中也一样啊,你想继承继起码得有两个主体,谁来继承谁吧,是不是?比如说我继承我爸妈的愿望是不是,或者说是名人继承了什么呀,继承了这个叫做火影的这个一致是不是,那这里有两个主体呀,没错,在计算机面上对象的集成中也有两个主体,哪有两个主体呢,一个。
03:10
叫做被其他类继承的类,也就是上面那个顶级的啊,那这个类。叫做什么呢?负类啊,叫做负类。而还有一个就是继承其他类的类。继承其他类的类。的类,这个类也有个名字啊,这个类叫做子类,你这一想还是真是那么回事,对不对?你看一般都是儿子继承父亲的嘛,是不是,所以被继承的是父亲,而继承的是儿子,而且这里边啊,我们这个父类还有另外一个名字叫做什么呢?也叫做鸡肋啊,叫做鸡肋,不是鸡排骨的鸡肋啊,是基础的鸡类,别的类就是基础的类的意思啊,或者叫做超类啊,呃,不是这个类啊,或者叫做超类,这是我们父类的一些别名,子类呢,也有一个别名,它也叫做派生类,很多是假设叫派生类啊,就是我某一个类生出来了,所以叫做派生类啊,这是面相对象中继承的两个过概念,是不是?那通过这两个概念我们也知道了,继承得有两个类来完成吧,是不是没错,下面给大家介绍一下继承的格式,我们如何让两个类之间实现继承而进行操作呢?好,那在这里边P。
04:27
子文件啊,然后名字呢,我们写到发叫dad吧,行不行,Dad and soon行不行,And son啊,就是爹和儿子的意思啊,很多时候那你们写继承单词啊,EST很多时你是不是不会写继承单词啊,那都也不至于这个单词extend extend我也会写,但是。但是大家不要这么写,很容易出问题好不好,后面告诉你为什么啊,第and soon就可以了啊,你就这么写就没问题。就是第二个儿子嘛,来。既然要想继承,我们得有两个类啊,来先写一个父亲类啊,就是用来被继承的类行不行,父类啊,父类,那么我们在这里边写一个类,叫做father行不行,Class叫father father类,Father类里边我们可以加一些成员属性和成员方法行不行?成员属性然后加一些成员的方法,好属性这块呢,我们给它加上一些什么性别呀,年龄啊,这些东西随便叭,如说姓名。
05:28
应该叫last nameme是不是lastname啊?Lastname这是姓,比如说我们姓什么呢?我们姓刘,什么叫姓刘?然后呢,呃,这个。拉你们怪怪的,应该叫family name。Family family family name就是姓啊,这就是姓氏,明白就是姓啊,姓氏啊。就是姓什么?姓刘叫什么呢?First name。是不是外国人喜欢这么叫啊?就是也就是说外国人把这个姓放在后面,名字放在前面嘛,啊,然后这里边叫被,所以外国人比较强调什么呀,他把名字放前面,就比较强调个性对不对,而中国人把姓放在前面,就比较什么呀,比较这个叫做提倡传承啊啊,然后这是他的名字,也就是说这个类实际上叫是什么类呀,是不是一个父类,但这个父类的名字叫刘备对不对?好,这是他的名啊,名字好,然后接下来他还有性别,是不是six等于男吧。
06:28
好,等于男啊男的,然后A等于38岁48吧,48岁行不行,然后呢,肤色啊,等于黄色。肤色是黄色啊,黄色好,然后我们给大家写上一些注释好不好,这是它的性别,这是它的下面,这个是它的年龄,然后呢,这个是他的眼肤色啊,肤色好,再加一个吧,行不行?比如说再加一个媳妇吧,行不行?Wife啊外夫等于这个刘备历史上媳妇好像不少啊,有仨媳妇儿啊,有哪些媳妇呢?有甘夫人。
07:03
是不是,然后逗号这是一个,还有什么糜夫人。嗯,还有孙尚香,是不是孙写错了,叫孙尚香好,孙尚香好,这都是我们啊,刘备这个人的媳妇儿啊,我们就只是拿刘备当负类而已啊,然后出方法加一些功能呗,刘备会干什么?他肯定会吃饭呢,是不是咱就写一个吃饭的功能来D?然后呢,Print我们写上啊。写上什么呢?叫这个叫什么来着。燃烧我的卡路里叫,呃。甜甜圈啊甜甜圈,然后呢,咖啡面包方便面是不是方便面好,这是我们吃行不行,然后呢,再加一些功能,比如说再加一什么呢,再加一个这个跑的功能行不行。叫跑的功能好DF咱加一个run套上框,Print套上框print print套上框是不是。
08:07
套上框啊,叫拔起腿就跑,拔起腿,嗯。拔起腿就跑。好,然后再加一些啊,刘备还会干嘛,还会做草鞋,是不是还会做鞋,是不是还会我们做鞋子,然后呢,我们就在这个d make shoesho啊make shoes做鞋是不是啊,刘备做的是不是草鞋,咱就写上print啊,我们写上啊先做鞋。做草鞋行不行?好,没问题。然后呢,OK,我们写了一个类是父类,也就是father类,那这个father类呢,里边有应该是这是六个属性,还有三个方法对不对,所以给大家打印一下行不行,在这里边我们打印。打印L叫father类的成员,Father类的成员啊,这个有难度吗?没什么难度,因为大家都会嘛,Friend他话fat样father点下线上线下线上线。
09:09
右键运行一遍。有问题吗?你看姓名刘备是不是都在里边,性别还有这个功能是不是都在里边写着,我就不给大家一一看了哈,比如说一个类已经这么好了,然后呢,大家都知道我们有发的,是不是还要写一个儿子类来继承他爸爸的成员啊,是不是,那怎么写呢?来声明一个子类啊,声明一个子类。子类这个类名呢,咱就叫宋是不是啊,Father类是爸爸嘛,这个就是儿子类啊,那子类里边看好了,我什么都不写,什么都没有啊,子类里面什么都没有,然后这个时候大家请注意我要打印。子类的成员啊,大家很多说这里边能打印出啥来呀,啥也打印不出来,来是不是来so点下线下线D啊下线下线,然后这个时候大家来看啊,优点运行一遍。
10:00
看见没有,你会发现子类里边东西好像就几个默认下划线的成员,因为咱说这个现在不用学对不对,那剩下的啥都没有,没错啊,你这个子类里边本来就是空的嘛,是不是写了个pass空的什么都没有。但是很多说那我要继承了,会有什么现象发生呢?大家看好了,继承的格式怎么写呢?如果我们这边有一个class,有一个负类啊,有一个负类。父类,然后呢,里边有一些内容,子类希望继承父类,怎么做呢?Class,看好了子类,如果你希望子类继承父类。那么正常情况下,你只需要一个东西就可以了,在子类名称后面加一个括号,在括号里边写上它的父类是谁就行,也就是说你把负类往这里一写啊,负类往这一写,这个时候就表示当前类要继承到负类,就是它明白了吗?所以返回代码这块啊,也就是我想用丧类来继承我们的father类的话。我们只需要这块加一个什么呀,发了就可以了,这就时效的继承语法不会错误的,语法不会错误,但是大家会发现另外一个问题,语法是没有错,但是为什么下面东西不但没有多,反而变少了,对不对,好。
11:16
为了解决这个问题,我们教大家一个测试的方法啊,干什么事呢?我先来实例化一个子类的对象行不行?好了,实力画子类的对象啊,子类对象我来看,大家看一下我们继承有没有真的发生对不对,然后呢,干这事呢,那刘备的儿子叫刘禅是吧,刘禅好好等于我们的丧。是不是有对象了,这是不是子类的对象?看好了,这是子类的对象啊,子类的对象。子类的对象在我们没有继承之前也就是这个样子啊,没有继承之前好程序运行有没有问题呢?没有问题,但是我想访问子类的。成员,比如说我们想访问词类叫什么,这个姓氏行不行姓氏那就print啊LSLs.family内family family name你能访问到吗?答案是不能,因为子类里边怕什么都没有,一个出来没有,然后你还想访问问子类对象的family name,也就是对象没有,虽然找子类要,但是子类里边也没有,所以这个时候你访问它会报错,告诉你这个对象里边根本就没family name看见了吧,你再访问其他的也是一样啊,Print套上框LS子类对象的什么东西呢?啊,还有什么个,还有这个性别是不是?
12:37
还有print套上括号此类里边的什么年龄是不是,甚至调用一个方法,LS里边的makeho ES make作息的方法,你会发现这些方法和成员属性也好,这些方法通通不能访问啊。一个都没有吗?因为子类没有这些东西啊,是不是子金箱里边字眼不会也不会有啊,你看这里边一个都不行,都注数类也不行,看到没有这个没也没有对不对。
13:02
所以我们也证明了一件事啊,这个子对象里边他没有找父对,找父类,找这个类药是不是不能是父类啊,子对象没有会找类药,但是类里边也没有,那是不是就没得要了,所以访问不到啊,但是看好了,我们这里边继承的时候加上了一个father。于是乎,干什么事呢?子类就开始继承了父类的东西。这里边儿就形成一条完整的什么呀,完整的一个链条,给大家画上图了,你看一下啊。打开我们的画图板,给大家画一下这个刚刚继承关系所带来的一些变化啊。画图哪啊,附件附件我的附件呢。附近附近附近我没找着,等会儿啊,别着急哈,啊在这呢,好打开我们的画图板,画图板。好,原来呢,我们在程序中声明了一个father类,也就是我们的负类,对不对,Father类啊,FA father类。
14:02
然后呢,又声明了一个儿子嘞,啊,上面又声明了一个儿子嘞,当然他俩开始没什么关系嘛,对不对。好儿子嘞啊。这是一个丧的类,Son啊丧的类,然后呢,它俩之间开始没有关系,但是呢,我们却用子类啊,就是丧类实例画出了对象对不对,实例画出了一个对象啊,这个对象就是LS嘛。这里边儿有一个LS对象啊LS对象。这是一个LS对象,然后呢,你会发现,哎呀,我用LS对象访问信息的时候,啥也访问不出来,就是刚刚这个结果嘛,是不是啥,你随便蒙的一些,随便写的什么姓氏啊,姓名啊,啊,姓氏啊,年龄啊,性别啊,是不是都访问不到啊,原因很简单啊,因为我对象也没有子类里边啊,这个对象里没有,类里边也没有,但是我们当时声明父类的时候,父类里边是不是写了很多东西啊,什么FA family family name呀,Six呀,还有age呀,还有什么坐席做鞋一大堆的,是不是,还有什么make呀,Make shoes呀,吃饭呐,跑啊是不是好,那我们现在子类和父类之间没有关系的时候,你的子对象LS是访问不到任何信息的,咱刚才已经测试过了,对不对,但是我刚刚是不是在子类的后面加了括号,并且指明了另外一个类,这就表示我要让丧类来继承。
15:33
类,意思就是在这幅图中,我把丧类和父亲类之间打通了一条线,打通了一条线啊,这条线是继承关系线,啊,这条线是继承关系线。所以他俩实现了一个继承关系,红色的叫做继承关系啊,继承关系好,那么这个时候当我们LS访问信息的时候,没有他会找自己的类要,而自己的类没有的话,他会再次往上追溯他的继承关系,找到father类,而father类里面是不是有family,有,有什么方法属性都有,对不对?于是乎看好了,当我写上继承方继承的负类之后,把下面这些原来不能访问的成员属性和方法再次打开,你会发现访问姓氏,我找到了流,访问性别。
16:21
我找到了。男访问他的年龄,我找到了48。访问他的这个做鞋功能,他真的做出鞋来了。看见了吗?真的做出写来了,所以我们刚刚这部继承关系带来了质一样的飞跃,就是什么呢?把父类中的成员全部允许子类来访问了,这就相当于什么呀啊,我父亲有的东西是不是,那我自然也可以用了,那我父亲家里有个有个什么呀,有个这个呃,车,拖拉机我可不可以开,可以啊,我是他儿子嘛,是不是?你要去开肯定不行,你不是他儿子,那我是他儿子我就可以开是不是?我爸有一个铁锨是不是铁锹,铁锹我也可以用啊,但你不能,因为你不是我们家人是不是,那我爸是不是,我爸家里有好吃的我可以吃,你不吃你因为你不是我们家人啊,你去吃那就违法是,除非我们给你,否则你吃是违法,但是我在家里吃,我不需要我妈同意,我就可以吃,是不是?所以这就是继承官来关系带来的好处,一旦实现了,一旦实现了继承关系啊,一旦实现了继承关系,那么你当前什么呀?子类就可以继承父类中的成员了。
17:28
就可以继承父类中成员了,所以我们的继承关系带来的是什么呢?代码重用率的提高,所以继承的意义在哪里啊,继承的意义。我们要为什么要继承啊,是不是的意义,它是什么呀?要提高代码的重用率啊,提高写错了,提高代码的重用率,重用率啊,写错了重用率啊。然后同时建立了两建立新的类与类的关系,然后呢,方便其他逻辑操作啊。
18:05
啊,因为如果两个类互相没有关系的话,那你两个类之间的东西是不可以共享,但是有了继承关系之后,我就可以用你的东西啊,所以这就是继承所带来的意义,说白了,继承还是因为程序员懒,是不是我不想把原来有的代码再写一遍,于是乎就产生了继承这种操作嘛。还没有完啊,当我们实现了继承操作之后,我们就要来一个继承,咱之前特别注意的一下啊,继承一个类可以获取一个类的所有成员吗?并不是所有成员,所以这个大家需要注意啊,继承的时候有一些非常重要的特征需要我们来一个一个的来了解。好了,首先来给大家写一下我们的继承特征啊。我们一个个写,一个个做实验行不行?这些东西必须熟记于心啊。继承的特征。好,第一个。首先啊很多说,那你首先所有类,所有的类啊的类均。
19:06
继承自object继承啊字object类。也就是说白了啊,我们整个程序或者整个所有的pthon的类当中,都默认继承了object类,只不过是PS2的时候你得写出来,P3不用写很都说这这怎么看呢,是不是你看好了,我在发的后面你可以加一个object object写和不写都一样啊,来运行程序不会有任何变化,和原来一模一样,对不对?而我们正常情况下,如果你写一个儿子类啊,你写一个儿子类后面什么都不加的话,它默认继承的也是object,明白了吗?所以任何类在不指定负类的情况下啊。默认继承object类,明白了吗?所以有个前提啊,在不指定我们父类的情况下啊,情况下,所有类均继承词object类,而object类是系统提供的啊,系统提供的。
20:08
这不是我们能够改变的,很多说,哎,是不是我可以改改什么的,不行啊,那系统提供的那个类,它还自带一个类对象了,是不是这些东西都是系统信好给我们用的,说白了这是干嘛的?这是构建P面向对象的根本有点像什么呢?现实世界当中构成世界万物的原子啊,在物理学方面原子是不是最小单位啊,你可以说世界外是万物都是原子做成的,对不对?这种说法是没问题的,那我在Python里边就可以有这句话,任何类均继承自object类,这句说话也是没有问题的啊,很多说,那你这样的话,儿子类继承父类,他也继承object类吗?是的,因为继承关系并不说只有两层,你儿子继承father,是不是father还继承object?所以你说儿子继承object对不对?也对啊,你说你看我是我爸爸生的,是不是我爸爸是我爷爷生的,那我爷爷最后是什么呀?往上再推推推推推,最后是不是猿类演化来的,再推推推推,是不是细菌演化来的,所以说我其实就是细菌的后代,有没有问题,没有问题,就这个意思啊。
21:08
好,这是第一个特征,先往脑子里记啊,我们也将做测试,是不是也可以看到任何类都可以默认记成object类的好。这是第一个,第二个子类继承父类。继承。父类就具有负类的所有成员,但是有一种成员是除外的,什么成员除外呢?大家看一下啊,我们在刚刚写的这个父类和子类当中继承的时候,确实发现你随便玩是不是因为我实现了继承,所以你父类中的信息我随便访问L点,比如他不是还有wi fe吗?还有媳妇是不是我也可以打印一下子看框。来,你看我能不能打印出这个媳妇啊,来,把前面注释要啊,免得影响我们刚刚测试。好,把这个注掉,不不是多了一个啊,把这个注释掉,大家看一下,我打印这个LS就是刘禅这个对象的时候,你会发现他的外里边写着甘夫人,糜夫人和孙尚香,这好像不太对吧,我们LS对象他明显是孙类是不是,而孙类。
22:17
是没有外的,他只能是从什么呀父类中拿外的,这个好像就有点刘禅什么呀,刘禅的媳妇儿,结果是刘备的媳妇儿,这好像怪怪的吧,是不是?因为那是他妈不能说他媳妇儿,所以呢,媳妇儿这个东西大家都知道,是不是应该是私有成员是不是,所以这里边我们应该对于叫做媳妇啊进行私有化操作。私有化操作,谁家媳妇都是自己的是不是,所以呢,私有化之后大家看啊,双下线加上之后,这个时候你把某一个成员进行了私有化,那么恭喜你,这个成员仅能为当前类和对当前类的对象所使用,其他类是无法使用的,看见了没有丧里边并没有外很多是加双下划线,是不是没有用啊,装下划下划线加上去依然不能访问。
23:07
看见了吗?是不是依然不能,所以这一句这里边告诉我什么呢?私有成员归原有类和对象所有啊,私有写错了,叫私有成员。啊,仅仅仅仅允许原有类和原有类的对象访问,子类也不可以访问,也不子类也不可以继承或者访问,这不很正常吗?是不是你继承你你父亲财产的时候,能把你妈继承过来吗?这个自然是不允许的,是不是伦理道德上也不合适,也不允许,对不对?所以在这里边需要注意啊,我们继承是能继承不假,但是私有成员是没办法继承的,明白了吗?好,这就是我们的第二条意义所在。好,第三点,第三条是什么呢?那我们子类继承了父类,是不是把子把父类东西,东西都搬到了子类当中存了一份呢?其实不是啊,子类继承父类啊,继承父类写错了啊,继承父类写错了父类啊,它不会将父类成员复制到子类中啊,但是子类。
24:18
写错了啊,子类如果需要成员,他会什么呀?可以找父类什么呀?需这个叫做索要啊,索取吧,叫索取,明白了吗?因为我们刚刚其实给大家做过实验的,什么实验呢?就是当时我们刚做好了这个发类的时候,是不是打印过发德类的成员,我们会发现father德类成员里边什么都有,但是当我们生命了一个子类,并且我们也把子类和父类之间之行了继承关系,当你再次打印子类的时候,你会发现你父类的成员啊,把这个都掉,你会发现我现在只打印两个,就是父类的成员和子类成员嘛,你会发现子类里边没有父类的任何成员的,你看到没有,子类就是东西,因为它没有必要从这个图里也可以看出来啊,你继承既任可以通过继承关系反向追溯,我没有必要把上面东西再负这一份放到子类里边,那样是不是会加大程序负担啊,耗费更多资源啊,所以这是我们的第三条啊,第三条特征就是继承是没有问题的。但是我不。
25:19
会复制一份到我子类里面,因为到此一举对不对,然后呢,接着看下一个特征。下一个就是一个疑问的东西啊,你看我们刘备是不是是一个父类丧是一个子类,那没有问题啊,那刘备这个名字你不能爹妈不是不能爹和儿子都叫一个名字吧,我要继承父亲的姓是没有问题,比如说在三国时期啊,刘禅要继承刘备的姓氏,所以他姓刘,对不对,但是刘禅他不能再叫刘备了,因为刘备是他的父亲,所以现什么呀,名字这个东西应该是私有的吧,对不对?应该私有的好,他说那我不私有行不行,不私有也可以,不私有也可以啊,那就得什么呀,稍微改改是不是啊,因为什么呀啊刘刘备可以有名字对不对,刘备有名字,刘禅也可以有名字啊。
26:06
那我只要名跟我父亲不一样,或者我把名改改是不就可以了,是不是,所以一个道理啊,你可以把它私有化,私有化了之后呢,我们这里边儿谁刘备啊,不刘禅啊,就LS就不能访问来看好了。私有化姓名这块写上私有化姓名啊,私有化姓名,那这个时候print套上括号,大家都知道,我如果用LS对象点我们的什么呀,First name first name是访问不到的,因为私有化了嘛。是不是因为私有化了,所以你打印的时候,嗯。啥也没打印出来。是不是他没报错吧,报错了啊,你看到没有,所有对象没有属性first name,他都说那我可不可以在自己类里边加一个呀?啊,自然可以了,哎,你有自己的名字,别人管得着吗?管不着来Fi啊,叫做fire first name。但是我们一般自己就不用加线了啊,For name等于留善的善,是不是善,禅让的善啊?
27:03
好行不行呢?来右键程序运行一遍,看见没有是不是可以啊。所以这里边儿需要注意啊,是如果说某一个成员被私有化了啊,某一个成员被私有化了,私有化的。私有化的成员啊,允许在子类中啊,单独建立一份啊,建立一份这样的话,他不会不会找不会找负类去所索取啊,索取私有成员,这是我们第四个需要注意的特征,就是啊,你有名字我也可以有啊,对不对啊,你虽然私有化了,但是我也可以有自己的是不是,所以这就是父类私有化之后,子类独自是不是写错了,独自。啊,添加的成员,当然我们儿子可不可以有他父亲没有的成员呢?继承是把他父亲都拿过来对不对?所有的出外,但我儿子可不可以有自己的功能可以啊,或者有有没有自己的成员也可以啊,比如说我们在父类当中并没有看到父亲有一个身高的成员,是没有啊,那么我可不可以在子类里边为子类添加一个独有的成员呢?啊添加啊,添加子类独有的成员,所谓独有就是父类没有的。
28:23
所有的寿元,比如说给单位再加个体重吧,行不行?W t wait等于200斤行不行?200斤啊,200斤写错了200斤。有没有问题呢?程序运行完全没有问题,不会有任何错误,并且我想访问这个white也是可以访问的啊,来访问此类独有的成员啊。就你类自己家的嘛。独有的成员,这自然也是没有问题的,我们通过对象LS点叫什么来着啊white啊,Print打印一下,好吧,我们就可以看出这个流善对象的一个体重是我们刚刚添加了200斤。
29:02
看是不是解也出来了,所以这是我们的下一条,也叫做第第几条,第五条啊,五条子类,子类可以根据需求啊,子类可以根据需求,需求添加自己独有的成员啊,独有的成员来进行操作啊,来进行操作,你想加成员属性也行,想着出来方法也可以,但是子类和父类肯定什么呀,不完全一样,因为子类咱经常说轻出余儿胜于蓝是不是,所以他可以有自己独有的成员属性和成员方法啊,然后呢,还是没有完,来接着看下一条。什么东西呢?我们刚刚啊,刘禅从他爸爸那里边儿啊,就是刘备在里边是不是继承过来了一个做鞋的功能,还记得吗?这里边是不是有个做草鞋的功能,是不是有一个做鞋的功能,那我们现在这里边来访问做鞋的功能,能不能访问到呢?自然可以,因为他也没有私有化,是不是Ls.make shoes啊make数这是从他父亲那继承过来的做鞋的功能。
30:06
看到没有,是不是做草鞋啊,但是呢,我们干什么事呢?诶又有一个小小的疑问了,这个干什么事呢?刘善,他产品工艺经添加了,或者产品工艺变厉害了,我不再做草鞋了,我开始做皮鞋了。也就是说我还想做鞋,但是我做的不再是草鞋,而是皮鞋,这里边就涉及到一个,我能不能把我父亲继承过来,我继承过来的父亲的成员进行一下修改呢?也可以啊,那所以这第六条就是什么呢?叫做子类。重载父类啊,子类重载父类的成员。什么叫重载负类啊,简单说就是对球员方法重新定义一遍呗,是不是?那在这里边打开一下啊,我们如何重载负类的成员呢?首先啊,做鞋子功能,做鞋子功能父类已经具有对不对?那我们如果没有自己再添加一个做些功能的时候,子类调子类的对象调用的时候依然是做草鞋对不对?那我如果希望更新它的工艺怎么办呢?很简单,把你刚刚那个父类的功能在子类中重新写一遍,然后在什么事呢?重新定义,重新不是重新啊,叫重新定义功能就可以了,重新定义功能即可。
31:28
哎,我这次不是做皮鞋吗?来,套完挂我们做皮鞋。做皮鞋是不是?不是。人造革是不是是真的皮啊?不是人造革,是真的皮。好搞定,那么这个时候大家请注意我父类里边的作写啊,实际上在继承关系中已经被子类继承了,对不对?但是由于子类中有和它一样的方法,所以子类这个方法会完全覆盖掉父类的方法。
32:01
很多时候在哪覆盖的,在负类里覆盖吗?其实不是啊,其实是这样的,画出来看,这不是有make shoes吗?你子类里边如果加了一个make make make make shoes的话,如果你在子类这里边加了一个make shoes,实际上LS在访问这个做写方法的时候,他找他对象要就发现有了,就没必要往上追溯了啊,所以这种方式叫做重载啊,但是重载的时候只是对子类有效,它不可能改父类的啊,所以这就是我们的第六大成,子类可以重载父类的成员,当然它仅仅。叫仅仅是对子类。和对象有效啊,有效它并不会影响负类的啊,并不会影响负类。你改归改这个关系就是什么呀,其实这个跟大家说一点啊,就是这个子类和父类的关系,有点像对象和类之间的关系啊,有点有点相似的。好,然后接下来看啊,这是我们的第六条,有没有问题,就是关于重载的问题啊,你看着哪个成员不好,你可以给重新改改属性也可以,方法也可以,我们刚刚是不是就是把这个做题的方法给它进行了一个重载啊,是不是,所以这个叫做重载啊,这个操作称之为重载。
33:16
称之为方法重载。重载就是重新载入的意思啊,就相当于呃,变量重新赋值嘛,这是我们的第六条特征,好,第七条特征,接下来看我们刚刚在副类里边看到了有一个跑的功能,打仗的时候拔腿就跑,这没什么问题,对不对,拔起腿就跑。这个容易被人抓住是不是?所以呢,刘禅他干什么事呢?在这方面做了计划,我不但要拔起腿就跑。我还要在拔起腿就跑的基础上做上,或者加上或者减去更多的一些操作,也就说啊,我要用跑的功能不要紧,而且我还要对这个功能进行修改。
34:02
但是这个拔腿就跑这个操作我还得留下去,也就说类似于重,就是和重载相似,好,那这个时候叫什么东西呢?来看好了,给大家做你就知道了,在这里边我们再加一个重载啊。再加一重载这个字是什吧,跑的冲载啊,跑路的重载啊,跑路载原来的方法叫做什么呀?瑞对不对,叫放这个方法叫RA啊,就是跑路嘛。然后这个时候我跑路功能提升了,给大家写一下啊,这确实在重载啊,这个也在重载啊,重载负类啊,重载类的操作,重载负类的操作,但是你看好了,我这个重载和负类不太一样,是不和上面不太一样的,是上面是完全覆盖,而我们这次做的是什么呢?嗯,覆盖。叫在叫做,在覆盖的同时还要使用原有内容。
35:02
简单的说啊,我们原来这个父亲的跑不是拔起腿就跑吗?那我们这次在他前面加点功能,在在后边也加点功能,但是这个拔腿就跑我还得要。就这意思,所以这个时候你看我怎么做的啊,在这个子类当中,我在拔鸡腿跑之前啊,我们原来不是有一个功能叫拔起腿就跑吗?我可以帮你先复制过来,好吧,原来这个功能不是拔鸡腿就跑吗?好,咱们里边加上去啊,我在拔鸡腿就跑之前添加啊一个操作,比如说拔腿就跑,你是不是得是吧,我得先穿上鞋行不行,所以我们再加一个print穿上鞋子啊。穿写错了啊,叫穿上鞋子行不行,写错了啊,穿上鞋子,然后拔起腿就跑,然后边跑边喊啊,再添加一个操作一个操作啊,一个操作,好汉要命是不是print框啊。
36:02
好汉。写错了,好汉饶命。饶病好,就这么写,有没有问题呢?没有啊,我们现在完全实现了重改的,真的来右键运行一遍,好好把下面这些注释,先把这些下面操作先注释了行不行?咱来看一下这个重载的跑路方法。访问。跑路方法啊,访问跑的方法,来LS对象点ru呗,他跑的确实和我们想的一样,三步呗,穿上鞋拔起腿就跑,好汉饶命啊,是不是好?这三步完成了之后,我们回过头来想一个问题,什么问题呢?这里边有一个代码已经是存在的。拔起腿就跑,好多说这一行代码复制过来,复制过来呗,说是一行代码,但是我们在写类的时候,这一个类的方法里边可能有成百上千行代码,那如果这里面写的不是一行代码,而是1000行代码,你也打算复制过来吗?
37:05
并不打算这样做吧,是不是,所以我们最好什么呀,直接能够,哎,把上面这个方法就把它付了这个润拿过来就是加进去就可以了,是不是,我最好在这里边,哎哎,我别复制过来,我干什么事呢?我在这里边直接调用下负类,写错了调用一下负类的跑路啊跑路。跑路方法,说白了,我们这个跑路方法不就是在负类的前面后面加点东西吗?那负类的方法还可以用啊,是不是?所以我最好能把它调用过来,对不对?那该怎么调用负类的方法呢?好了,现在教大家一招啊,现在教大家一招怎么样把负类中的方法给你拿过来。好方法有以下几种,首先呢,我们可以这样up super括号点,然后写上什么呢?写上我们的瑞就可以了。好了没有然后了,然后呢,程序一夜行,你会发现,诶还是散步,穿上鞋子拔起腿就跑,好汉饶命看见了吗?啊,那这种操作是允许的啊,这行代码这行代码看好了吗?明显没有写汉字就没有print,但是我确实最后输出了拔唧腿就跑啊其实这句话的作用就是找它副类,把它父类的这个功能啊润的功能调在这里边执行了一遍。
38:24
看好了吗?这是第一种方法。方法一啊,方法一。方法一啊,好像super是啥意思啊,Super super super是不是超级的意思啊,是不是啊,所以呢,你可以认为啊,他这个super就可以找负类,但是仅仅是暂时这么认为,暂时可以。可以认为super表示寻找负类啊,寻找负类。只是暂时的在说遍,后边我可以详细给你讲解啊,Super找到负类,再用负类圆润是不是,那这样的话自然可以把副类的拔腿就好拿过来了,这是第一种方式。
39:06
第一种方式,还有第二种方式,干什么事呢?我不写super啊,我写什么呢?我写它的类名。来,我们还是调用一下负类的拔腿就跑的方法是不是,但是这次我用类名的方式也可以找到他爹叫什么father吧,Father点啊什么呀,Ring啊,但是通过类来调用一个含有S的方法,大家看好了,这个father是不是是一个类啊,这个方法跑里边是不是有个S,那自然要给他传一个对象才能跑呗,是不是?那在这里边如果直接运行程序会报错了。报错就是这个发润少一个参数嘛,所以你看是不是你得把当前的这个类,这个方法中的SF给它传进去就可以了,那这个serve是不是代表儿子对象本身啊,那你把儿子对象放到了他父亲的跑的方法里边,其实就是借助他父亲的方法让儿子跑一个道理啊,这种方法也可以实现,看见没有效果是一样的,这是方法二,这是方法二。
40:04
那这样一来的话,我们就为我们最后一个特征写上了,啊,写完了啊,最后特征这是第七个,最后一个特征就是子类重载父类的时候。子类。子类在重载父类的方法的时候啊的时候可以。叫做可以什么呀,访问可以叫做调用吧,调用负类的方法来进行操作,那这样的方式啊有两种。两种,一种是通过super括号点负类方法名。负类方法名烫框的方式,一种则是通过负类名啊,叫做负类,写错了叫负类名,点附类方法名的方式来进行操作。
41:02
但是这两种方式有限制的一种方式。就是我们刚刚用super这种方式啊,它仅仅允许方法带self,也就说白了,你要想用它必须是对象访问的方法啊,叫必须是对象方法,必须是带有SF的对象方法才可以使用super点负类放面,而我们下面这个就无所谓了,下面就是任何方式都允许啊,就是你用你这个,你你这个对你这个方法,你这个方法里边,呃,有S没,我都可以用这种方式来进行调用啊,不过你得需要注意啊,如果有S的话,你是不是得给人传一个东西啊,没S的话你就不用传了。这就是面向对象继承的一些内容和它的一些操作原理,这个东西对大家来说啊,还是很有必要的啊,因为继承在冥想对象中非常的常用啊。本小节到此结束,我们下一小节继续为大家讲解继承的相关内容,多继承与单继承和菱形继承。
我来说两句