00:00
好,那么昨天的话呢,咱们是把这个项目呢讲完了啊,然后呢,今天呢,咱们就开始来讲啊,后续的这个新的这个知识了啊,诶今天这块我们涉及到这个知识点呢,有这样一些啊,比如说呃,首先呢,我们涉及到呢,这个叫继承性,这儿呢属于咱们讲的叫面向对象的第二大特征。啊,这个叫继承性,那么机遇继承性的话呢,我们再来讲一个叫方法的重写啊,前面的话呢,我们提到过重载,重载呢跟重写呢,其实没有任何的关系啊,这是基于我们继承性的讲的一个方法的一个概念,OK,然后呢,基于这个继承性呢,诶,我们就提到了子类和父类的概念了,呃,那么这块呢,我们又会引入一个新的关键字叫做super。哎,细胞来使用的话呢,大家可以对照着这次。对,可以对照着这次呢去理解,然后呢,诶,我们接着就可以讲叫此类对象实例化的全过程啊,像这些内容啊,其实都是基于我们这个继承性,哎,我们往下延伸呢,哎,能够讲到的这个内容,呃,然后接下来的话呢,我们再说一个面向对象的第三大特征。那么这样的话呢,我们整个的面向对象啊,咱们原来提到了说有三条主线,三条主线里边这个第二条主线呢,基本上就能告一段落了,诶封装继承多肽啊就完结了啊,那一般的话呢,大家在写简历的时候呢,我们说呢,上面呢,就是你的一些基本信息。
01:15
呃,然后呢,呃,下边的话呢,就是你的主要技能啊,主要技能这块呢,一般我们会写,比如15条左右。那么在这15条里边呢,通常第一条啊,大家一般都会去写啊,你叫熟练掌握呀,或者你叫熟悉呀,啊叫Java面向对象的编程思想是吧?诶那要是我是面试官的话呢,我一般呢都会,呃,看着你要主要竞争点,你看15个好,每一个的话呢,我都会啊给你展开去问一问。就是按正常来讲的话呢,都会这样啊,当然了,根据你的实际反应的情况呢,我可能会这个挑着这样去问啊,那么那那首当其冲的话呢,就是问第一个问题,说你这块写了,说你熟练掌握扎va面向对象的辩证思想,好谈谈你对这个面向对象思象的一个理解是吧?诶那么到目前为止的话,我们这个问题肯定答的是不完整的,因为我们还正在讲的过程当中啊,那么在讲到这个面向对象变成思想的时候,呃,那这里边落地的话呢,其实大家就可以谈的就是这三大特征。
02:10
诶,那么今天的话呢,相当于我们把继承性风呃多态性讲完之后,那三大特征呢,每一个大家应该都是能够谈一谈你的理解的。OK啊好,那么后续的内容呢,咱们到时候再说哈,呃,那么首先的话呢,咱们来讲一讲,这个叫继承性。OK啊,这块呢,我们就直接来看咱们这个课件了。哎,这个叫继承性啊。这个单词的话呢,大家不用刻意的去关注了。嗯,OK行,那么首先的话,一提到这个继承啊,嗯,往往呢,我们会想到生活当中啊,也有这样的一个词,那我们还经常的会去使用啊,这个继承的话呢,在生活当中体现呢,第一个就是财产的一个继承。啊,财产是吧,这个。老人这块啊,这个这个最后呢,留的这个房产啊是吧,这算是主要的这个遗产。啊,这个现在房子这个价格呢,一般都不低啊,当然主要你还得看是在哪个地方是吧?呃,一线城市二线城市,现在这个房子呢,这个价格肯定要高一点啊好,然后呢,这个财产上的这种继承,这是一种继承关系,然后还有一种继承的话呢,呃,咱们说从整个国家战略上来讲是吧,这个绿水青山就是金山银山啊,国家讲的这种口号啊,现在这个绿化呢,做的也越来越好了。
03:19
呃,以前的时候呢,这个大家都拼命的去砍树啊,把这个树卖了挣钱是吧,现代化呢,就是都在做这个绿化,诶绿化做得好,给这个子孙后代呢,这个相当于是留下一笔遗产是吧,这呢也算是一种继承性。OK啊,那么从相貌上这个继承心来讲呢,这个大家一看,这这这肯定是亲生的是吧。对,这就是基因上的一种继承性啊,哎,就是哎从上一代啊,就直接遗传到下一代了啊,哎,那么这块呢,你看啊,重点我还想说的,在继承之外呢,是不是还可以有进化是吧。啊,当然这进化得加个引号了啊,这个也是人家亲生的啊,对,你发现的这个原来小时候这个形象呢,还是很接近啊,这像亲生的这样的,大家看好像不像是亲生的。
04:02
呃,因为这时候已经进化的比较好了,是吧。OK啊好,那刚才呢,我们描述的这个内容啊,其实跟我们Java代码当中提到这种继承性的是有相关性的啊,一方面呢,我们啊,这里边儿就提到了一种子类和父类的概念了。说呢,父类里边有些功能啊,子类呢,就可以直接继承过来,直接来用诶就很方便了,那那直接呢,我们减少了很多代码的一个编写啊,那另外的话呢,子类除了能够继承父类这些功能之外呢,诶它还可以定义自己特有的一些功能。比如像这个郭麒麟是吧,这个演艺事业发展的,演艺事业发展的就挺好,那他爸就不行,整一个电影配一个是吧,哎,这个呢,相信人家就啊可以有自己特有的一些功能啊,这个呢是父类呢所不具备的啊,这个呢就是我们提到Java中这个继承性的一些体现了。好,那么具体咱们看一看啊,在代码层面呢,怎么去体现这个继承性啊,这儿呢,我从两个角度呢来说,第一个呢,叫从上而下。
05:02
哎,从上而下,比如说呢,我们现在呢,定义一个类,这个类呢叫person类,这个类里边呢,我们说明有属性有方法。属性的话呢,Name age first date,诶这样的三个属性好,然后接下来的话呢,我们又在项目当中啊,说需要又定义另外一个类哈,叫做student。这个student的话呢,诶我们在定义的过程当中,你发现呢,诶我也定义有name和birth,哎这样的一些属性,包括呢,它还有自己特有的一些属性。好,那定义完以后呢,你发现诶,好像这个学生啊,跟这个人啊,本身就会有一些天然的联系。啊,就好比是呢,我们要是画一个圈的话呢,这个人应该这个圈要大一点,学生这个圈呢,哎,应该是包含在人的这个圈儿里边的。哎,那么实际呢,我们在设计这个类的时候,你发现呢,诶人里边有一些属性啊,确实呢,我们在这个学生里边呢,也确实出现了,哎那么这样的话呢,我们就考虑呢,哎,那干脆我们让这个学生这个类呢,跟人这个类呢,哎发生点关系是吧。哎,这种关系的话呢,我们就称为呢,叫继承性的关系。
06:02
我们就可以让这个student呢,通过这样的一个关键字叫extend。啊,Extend是吧,这个得会得会念啊,通过让这个student呢去继承于person类,那么我说呀,继承以后啊,你在person类当中声明的这些属性,在student这块呢,就不用再去写了,他自然而然的呢,就直接的就获取到了。包括方法也是一样,哎,那我们这个子类的话呢,就直接拿到了。诶,你看这样的话呢,我们相当于比如说你设计一个类,这个类呢,设计的功能很丰富,那通过一个继承关系,这个类呢,可能啥也不用干,就一下子都有了。啊,就跟说含着这个金金钥匙,这个出生的这个孩子一样,富二代是吧?啊一出生的时候呢,这个家底就很厚。啊,就不一样啊,比如说这个国民劳工王思聪是吧,哎,这个可以,这个叫什么饰演很多的这个创业项目挂了也没关系是吧。这个这个有钱嘛,是吧,他从他爹那块继承的比较多是吧,OK啊。
07:03
好,这个呢,就是我们代码上的一种体现啊,然后呢,另外一种呢,这个角度呢,我是叫自下而上的角度。就是我们平时呢,在代码当中去体现这种继承性的时候呢,诶这个呢是两种场景是吧,有的时候我们是先想到这个所谓的父类了,然后拿到这个子类,也有的时候呢,我们是先啊就正常的去写,写的时候发现呢,我们可以呢,把一些功能呢做一些抽取。就好比是呢,咱们在项目当中呢,呃,需要用到这个猫这个类里边呢,有一些属性,一些方法,狗呢,也需要用到有一些属性,一些方法,就好比是呢,你现在在设计一个比如宠物的一个商店这样的一个项目啊,里边有猫啊,有狗啊,哎,这呢,你就设计了很多的这种小动物是吧?然后设计完以后的话,你发现诶,好像这些类之间啊,有一些共性。啊,有一些共性啊,相同的一些属性,相同的一些方法啊,那这个时候的话呢,你不能说诶这个猫跟狗,那我就让狗骑成一猫得了。那这个就不太合适了是吧,或者反过来啊,因为猫跟狗呢,是两个不同的种类了。
08:01
谁继承谁都不太合适,所以这个时候的话,我们就考虑到,诶,我把这个猫也好,狗也好,它们中的相同的,或者叫类似的这种属性和方法呢,我就抽取出来。哎,单独的放到一个类当中,那自然而然的这个类呢,应该是能罩得住它俩的哈,比如这只猫,这只狗,你这块呢,得整一个,哎,所谓的呢,比他们这个范围得更大的,比如说叫动物类,或者你叫宠物类啊都可以啊,动物类呢,就从自然界的角度了,你要宠物的话,就从。人领养这个这个小宠物的角度来说的啊,好这块的话呢,我们就定义了一个叫动类啊,那自然而然呢,这个动类当中,我就可以把它们共同的这个属性和方法呢抽取出来。封装到这个类当中,然后的话呢,我们让这个猫也好,狗也好呢,去通过继承性的关系啊,来获取啊,这个动物类里边的这些功能,然后呢,你自己这里边儿就不用写了。哎,所以这呢,我们是体现叫从下而上的这样一个角度啊,好,那么再举个例子。比如说我们在一个项目当中呢,需要用到像客户类,学生类啊,这个叫服务员类啊,这个教师类这样的一些类,还是自下而上的啊,这些类里边呢,发现他们有一些呃类似的属性和功能,那么我们同样的道理,把这些功能呢,抽取出来倒到一个类当中,注意这时候这个类呢,呃,咱们通常从这个。
09:17
呃,集合在这个角度来讲呢,你得能够hold得住这几个哈。对,所以这块呢,我们这个类呢,就叫做person类了。那么这个person类呢,就把他们共有的这个属性方法呢,就集中起来,通过呢继承性的方式,我们说下边这些类呢,就自然而然的啊,你不用写的情况下呢,就直接获取了这个类中的功能,包括在这你再来一个啊,比如叫农民类。呃,这个类的话呢,我也是啊,直接呢,继承于person类,我就直接拿到了你这个person类当中声明的属性和方法。哎,这个呢,就体现为我们代码层面的叫继承性。哎,应该说呀,这三个特征当中啊,封装继承多肽,哎,继承性的东西啊,其实算比较多的,就像我们刚才讲到后续的这些内容啊,其实都是基于继承性来的。
10:01
但是往往呢,大家这个继承性啊,其实理解的算是最好的。呃,因为呢,跟咱们生活中的这个概念呢,还是比较接近的啊好,那么首先呢,咱们来看一看啊,关于这个继承性的一个理解。啊,这个理解的话呢,刚才咱们其实也提到了啊,首先呢,从这个生活上的这个角度。啊,这个呢,我们就理解为呢,比如这个,诶财产的这个继承啊。产。哎的这个哎继承OK啊,包括这个叫颜值啊,这个叫基因的这种继承啊。好,这是一种啊,好,那从我们这个代码层面啊。哎,从这个代码层面来说呢,刚才我分了两个角度,第一个角度呢,是自上而下啊。另外一个角度是自下而上。嗯,OK啊好,那么自上而下啊,这个怎么看呢?比如说哎,我们这里边儿呢,定义了一个类A啊。
11:02
啊,定义了一个类A啊,然后呢,再定义。哎,另一个类B时。啊,类B式是吧,诶发现呢,这个类B中的功能啊,跟A是相似的是吧。哎,发现类壁的这个功能。哎,功能啊,与这个类A啊相似。哎,那么此时的话呢,我们可以考虑让这个类B。哎,去继承于这个A类。哎,这呢是我们说的叫自上而下啊,就是先有的前面这个类A,其实呢,我们有了继承以后呢,把上边这个啊,比如说这呢,就相当于是B了,这个叫A了,我们把A呢就称为叫负类了。呃,B呢,相当于叫子类了,所以这块呢,我们自上而下呢,就是先有父类后有子类啊,那么自下而上的话呢,这个相当于我们说呢,在这个项目当中啊,我们定义了,比如说这个类B呀,哎C呀B呀是吧,哎这样的等类啊。
12:00
等类啊,然后呢,我们发现呢,这个呃,这个BCD啊,这些类呢,有一些共性。啊有啊,类似的这个属性和方法,则可以考虑将呃,相同的这个属性和方法呢进行抽取。啊进行抽取,然后呢,这个封装到。哎,装到我们这个,比如说这个类A中啊。呃,然后呢,我们让这个类,呃,BC还有D呢,去继承于咱们这个哎类。啊类是吧,哎,这样的话呢,我们就获取到了类A中的功能啊,继承那个类A以后呢,我们说这个同时是吧,让类BCD继成一类同时啊这个BCD。他们当中啊,这个类似的功能呢,就不需要再去声明了啊。啊,功能就哎这个相似的功能是吧。
13:03
诶就可以呢,诶删除了,就是这个代码就不用去写了啊,通过继承的方式呢,就直接能获取到了这个类似的这个属性和方法了啊这呢就是我们相应的这个两个角度啊,那这个呢,其实是比较好理解的,那由这个出发的话呢,我们来看看这个技能性。啊,从这两个角度呢去理解的,它的好处是什么呢。诶,这个代码就不用写的那么复杂了,是吧?原来的话你看啊,我们在这里边,在这个子类当中我们写了四份,现在呢,你把它抽取到父类当中就放了一份,然后通过一个关键字叫expense,诶我呢就瞬间的获取到了你附类中的这个功能了,原来呢代码四份,现在就一份,是不是相当于叫减少了冗余。提高了代码的复用性啊,哎,相当于你父类的代码的话呢,此类呢,一继承,那我就直接可以拿过来用,这不是复用性更高了吗。哎,那么另外一个角度呢,说继承的出现啊,更有利于功能的扩展。啊,你比如说现在呢,我们从这个子类的这个角度,我现在又来一个类,又要去设计它,那设计它的时候呢,你发现呢,诶,我现在已经有一个父类了哈,哎,它呢满足这种子父的关系,我直接呢,就继承这个父类,这一下子这个此类的功能是不是就扩展了。
14:10
对的啊,诶你包括我们实际在开发当中啊,比如大家对这个手机比较熟,咱们就拿手机来举例哈,手机当中你发现这个界面当中,它有好多的这个咱叫视图或者说叫控件了啊,有的呢,属于这种文本性质的啊,叫test view啊,有的呢,属于这种可编辑性质的,比如说你这块光标往这一放,写你的用户名,你的密码,或者这个搜索框,你想搜索什么这个呢,通常叫做可编辑的这个文本框,比如叫edit test。呃,还有呢,属于这种按钮,还有呢,属于这个叫image view啊,就是这个放图片的等等,有好多的这种,这都叫视图了啊,那么虽然说呢,它们的形态不一样,有的呢是可编辑的,有的不能编辑的,但是呢,他们还都是有一些所谓的共性的。比如说呢,我们就定义了一个类,我就叫做view。呃,这个view的话呢,呃,你像我们在桌面上啊,在这个界面上,你可以去操作具体的某一个啊,给它上面呢绑定一些呃行为啊,当然这种行为呢,我们在安卓开发当中都叫事件了啊。
15:09
比如大家的这个按钮,我一点,这叫点击事件。啊,有的呢,这个比如说这个图片呢,我长按的话呢,可以出来一个,你是不是要下载啊,是不是要分享啊,这叫长按的事件。对吧,这样的一些行为啊,哎,那么我们在操作他们的时候呢,其实你得知道我操作的是谁,所以这块呢,像哎泛滥意义上来讲,这样一个视图呢,他们都会有一个ID嘛。是吧,它也会有什么是长和宽呀,有的还能设置一些颜色是吧,像这些呢,都属于作为一个普通的视图来讲,他们通识的一些属性。哎,那么包括呢,还有一些具体的,你可以设置它的点击事件啊,长按事件呀,是吧,这就属于一些具体的方法的这个事情了啊哎,那我们呢,就可以把诶作为一个视图来讲样,你通用的这样的一些功能啊,我就放到这个所谓的副类里了,然后呢,你在这个界面当中,你随便整一个不同类型啊的这样的一个视图,可能是一个按钮,也可能是一个图片的这样一个场景,是吧?诶像这些的话呢,都是具体的view的子类。
16:06
哎,你呢,一技能这样的一个视图,这呢,你又诶拿到了它这里边儿可以有的这样一些属性,包括呢,大家现在呃,用安卓手机也好,安卓这个iOS手机也好啊啊有一些视图呢,你发现呢,是人家自定义的。啊,有的时候比如说这种呃,加载是吧,呃,比如说这个京东,举个例子啊,京东是那个那个那个狗的那个形象是吧。我我就不画了哈,这画画的有点丑了啊,哎,狗的这样个形象,然后呢,比如说这个网比较差,你就看那个狗的话,它可能就在这儿,就是跑过来跑过去,跑过来跑过去是吧,就相当于正在加载的意思了,那么这个图呢,就是人家自定义的,因为只有京东才有这个狗啊,安卓的这个公司肯定不会一开始给他把这个狗设计好是吧,那他自己设计的这个视图呢,他在定义的时候呢,他就让这个自定义的视图也是继承于这个VI。呃,然后呢,你基于VIVO已经有的这样一些功能,你在设计你自己特有的。哎,所以这块呢,是不是也体现了这个叫功能的一个扩展就更方便了。
17:01
OK啊行,刚才我举的这个例子呢,就是开发中的这个继承性的体现了,好另外一点说,继承的出现啊,让类与类之间产生了叫意字俄的关系,诶为多肽的使用提供了前提,这个呢我们后续再说啊,这块的话呢,我们需要去关注。啊,ISA的关系,比如说哎,我们这继承已经出现了,说这个啊服务员ISA person。说服务员呢,是一类人。学生是一类人,客户是一类人,这都是畜啊,或者我们理解成了这都是符合我们的常识的啊,所以呢,这个猫呢,是一类动物。狗呢,是一类动物。所以呢,我们让猫也好,狗也好去继承动物呢,是天经地义的,或者是符合我们常识的。呃,一定不能,什么呢,为了继承而继承哈,你看我这里写这句话。什么意思啊,你比如说你看啊猫呢,哎,有名字有年龄能吃。啊,这这个不算啊,这个是他特有的,这个咱们以后再说啊,说呢呃人呢也能如此,呃说这块来了个学生,学生呢也有名,也有age,也能吃,说让学生干脆集成为猫得了。
18:10
这就不行了哈,这个不符合人类伦理,这个这个场景是吧,诶所以说这块呢,我们要不要继承呢,你稍微的可以这样去判断一下,比如说学生is猫是吧,说学生类呢,是猫类。那肯定不合适是吧,诶所以这块呢,你就不能够让他去继承。诶,你得符合咱们这个正常的这种常识啊,包括像我们刚才界面中说的,你这里边每个控件这都是个视图,所以呢,我们就定一个视图,你让他去继承,你不能这块呢,说我这是一个图片呢,是吧,我这是个按钮,你让这个呃这个这个图片去集成按钮,这就不合适了,他俩之间呢,没有这种意思,呃的这种关系。这种一则呢,其实就类似于咱们集合中讲的这种包含关系啊。说你这个呢,比如叫B,这个叫A,这呢就是B是不是就是is a a呀是吧。只要呢,这种关系呢,你发现他是处的,你就可以让他有这种继承性的这种关系啊呃,如果本身呢,他们都没有这种关系,就不要这样硬往这凑啊。
19:06
这个呢,就咱们说的继承性的好处。诶说它的目的是什么呢?就是咱们一般说到说诶面向对象三大特征,你是怎么理解的呀?那么关于继承性这块呢,你是不是得谈一谈它的好处了。啊,这个好处有的同学呢,就是就就就有的时候会乱说,比如说谈到任何一个说继承有什么好处啊,这个解耦。这这个什么的是吧,就是呃,有的这个词你不能乱用哈,解耦的话呢,你得看是不是真的有这种解耦性,在这儿呢,咱们可没提解耦的事儿啊。反而的话,你让类跟类之间原来没关系,现在发生关系了,这样说这个耦合度变高了,其实是吧,诶所以有的时候你不能乱说哈,这里边呢,主要体现就是这种减少冗余,提高附能性,然后呢,呃,实实现这个功能的扩展,这是。主要的呃,另外的话呢,多说一句呢,就是我们后边讲多肽,多肽的话呢,它的大前提得有继承性。没有继承性多肽呢,这个就没有意义了。
20:01
哎,到时候我们再说这个事情啊好,那么下边的话呢,就涉及到那说了这么多了,那到底代码上该如何去体现呢?这块我们就简单的先写一写啊,比如这块呢,我们有个类呢,叫A你去设计它内部的。啊,这个里边呢,有属性啊,有方法啊,好,然后接下来的话呢,我们声明一个类呢叫B。原来的时候呢,我们是这样写的,此时到A跟B之间没有关系,然后呢,我们在B这块声明的时候呢,加上一个extend。对,来个A,这就相当于叫B呢,哎。这个咱们就叫继承吧,B继承了A,所以呢,这时候呢,B就是A的子类了啊,那么这个时候呢,你里边假设什么也没写,那么负类中的属性和方法,你其实自然而然的也就有了。啊好,那么基于这个概念这个结构出发啊,我们这里边引出了两个概念啊,第的话呢,就是我们这个类A啊,另外呢,这个类B就给它起了起名,这个类因的话呢,我们称为呢,叫做父类。啊,英文的话呢,翻译成了叫做super class。
21:00
所以呢,基于这个名的话呢,有时候又翻译成叫超累。啊,有的时候呢,还起了个名叫做鸡肋。注意第二个啊。不是这个啊。积累这个啊好,那么这个类地呢。对,对应的就是子类啊,子类呢叫。不不不,叫上克哈,叫萨class。哎,萨不是也有子的意思嘛,是吧,哎子类啊,Sub class啊,这个呢,就是主要指的是我们这个它啊,有的时候也称为呢,叫做派生类啊。啊,这个你听一下,这个呢,相对来说叫的少一点,叫子类的多。哎,负类这块呢,就是叫负类叫超累这块其实都会出现。OK啊,知道呢,我们这样几个名就可以了,好,那这个清楚以后呢,下边咱们就具体的举个例子来看一看了。比如说哎,首先我们这里边的生命一类呢,叫做person。啊,这就叫哎人这个类啊,这里边儿呢,我们去声明这个属性,比如string类型的。Name啊,In类型的age,好,我就整这俩啊,Public VO来一个的方法。
22:06
哎,这个我们叫爱人吃饭是吧。Public。Avoid来一个。对啊,人睡觉。哎,行,我就简单的写这样两个属性两个方法了。两个方法啊,好,那么接下来的话呢,我们看这个另外一个类叫做student。只叫学生类啊,这个学生类的话呢,目前我先不让他去继承,哎说呢,我们在设计学生类的时候呢,发现呢,诶他也有这样的属性和方法是吧?哎,我就原封不动的,我粘一份啊,粘一份完以后呢,比如这个学生他可能还有自己额外的一些属性啊,比如说他有具体的死春型的一个叫做school。哎,这是他的一个学校学个号啊,这个学校啊,然后呢,他还有一个方法。啊,比如叫做study。哎,学习。
23:01
学习好这样呢,我们就设计好了啊,设计好以后呢,目前呢,这两类呢,其实没有任何关系。哎,这呢,我们来测试一下啊。这呢来一个没方法好,那么在这里边的话呢,诶我们比如说啊,先去创建一个叫person的一个对象,诶你有一个person啊,诶我这呢就调一下,比如这个name啊,这个呢复制为叫汤姆。哎,这个呢没问题啊,然后通过PE呢,我们去调这一方法,这个呢是关于这个person这个类的这个情况啊好,接下来的话呢,同步的我们再去来一个student。诶student好,他呢也可以呢,去调他自己这个内幕啊这呢,比如我们叫这个。托尼老师是吧?托尼老师的,这个是学生是吧,把他俩换一下。嗯,泡M是吧,好,然后呢,这个S,嗯一点它也可以呢去调离一制方法,那你看这都没问题啊,因为呢,我们在各自的类当中啊都定义了,而且此时呢,这个咱就不把它私有了啊呃,封装性这个事儿咱们就先不考虑了,好这呢都没有任何问题,哎,那么接下来啊,大家你看哈,我把这个s student呢,这里边这个属性这两个呢,给它注释掉。
24:09
哎,把这两个呢也注释掉。那么很显然的话呢,这时候我们在这块调用的时候呢,这不就报错了吗。因为你没有是吧。哎,这个就报错了,很自然的啊,行,这块呢没有好,那么我们让这个student的话呢,去继承于。哎,这不CE吗?哎,咱们这个person类。哎,我就继承了啊,继承完以后啊,这时候你再回过来一看,诶,你看又好了。这时候我们运行的话呢,也没有任何问题。你看啊,也是OK的啊,上面是那个person,下面是这个啊好这呢都OK,诶这个呢,就相当于是我们体现了这个继承性的一个特点,诶通过让这个所谓的子类继承于父类,我们就获取到了父类中声明的属性方法。哎,那有同学会说说我们讲这个类啊,里边提到过三类结构了,属性方法,还有构造器啊。那你说这个扩大器算是获取到了吗?
25:04
嗯,就是这个的话呢,咱们就怎么说呢,你可以在这个子类当中去调用浮类的构造器,但是呢,咱就不认为呢,说类似于像直接在子类中加载一样,因为咱们说构造器的话呢,它得与类同名是吧。啊,因为你这块呢,人家构造器叫person,你不能在student里边呢,呃,这个生命的构造器叫person,诶不合适。OK啊好,那么拉回来这呢,就我们刚才呢,就把这个事儿呢,做了一个演示哈,那演示以后的话呢,我们来说一说,在代码上呢,具体这个体现了,所以呢,有了这个继承性以后,哎,我们说下说子类。啊,就获取到了。啊,父类中啊,父类中啊声明的。啊,注意啊,父类中啊声明的,哎,所有的属性和方法。诶,你看我是这样说的啊,此类呢,就获取到了附中声明的所有的属性和方法,那言外之意,比如说我看这行代码哈,到了一个student的一个对象,如果呢,我们要是画内存结构的话啊。
26:04
说这呢叫一,然后你有了一个对象呢,叫student,那么问这里边儿你说属性有几个。或者说有没有负类的?有对吧,呃,一个呢,是副类中有name,有age,然后还有你自己的这个school是吧?诶所以呢,在我们堆空间当中啊,你这个student这个属性呢,注意这块呢是有仨,前面两个呢,是我们从副列当中拿过来的。哎,你也可以呢,直接调用这个方法,哎方法呢,该入战还入战,哎这。好,那么这个事的话呢,大家还可以通过这样的方式呢,来看一下,诶简单的话呢,咱们现在就先看一下这个debug这个效果就行,关于这个debug呢,咱们讲完这个第八章的时候啊。这是第七章啊,第八章最后,呃,带大家呢,整个看一看第八个该怎么用,现在我们就稍微的感受一下就行啊,哎,你看我把这个光标呢,不是光标了啊,在这个位置代码这呢,我点一下左键,这叫打一个断点的意思啊,打完这个断点之后呢,呃,你点这个位置也行,这个位置如果你要点第一个run呢,哎,这个断点呢,没有任何影响啊。
27:08
所以就跟你没打一样,诶我们点第二个这叫debug。第八个的意思呢,就是调试的意思啊。哎,这有个小臭虫是吧?咱们Java中这个出问题的话呢,都说出bug了。对,这个就跟最初的时候呢,那个计算器这个出问题的时候呢,发现里边有个真的有个臭虫是吧,所以呢,以后就都叫呃出问题了,就是出bug了啊理bug的就是调试的意思了,所以这你看一个小臭虫啊。好,这块我要一点这个debug的时候呢,这时候这个程序呢,它就执行到我们啊这个红点这个位置呢,就不动了。后边这个代码还没执行,包括这一行代码呢,其实也还没有执行。只是把上面的执行啊好接下的话呢,呃,现在我们先不详细的去说这么多的细节啊,诶大家你就知道我们这个操作呢,就是我点一下呢,它就执行一行的意思了。我现在往下点一下,诶光标呢,现在呢就执行到这儿了,但其实呢,这一行代码还没执行,目前呢是执行到上面这一行了,诶此时的话呢,我们能看到的在整个这个哎程序当中啊,包含的这种变量啊,有二变量是吧,P的这个变量。
28:12
哎,SSE的这个变量,那么S1这个变量呢,你往下一打开。大家你看。是不是有三个属性?诶对啊,这呢,就是想让大家看到的啊,就是我们这里边儿student的话呢,在堆空间里边啊,还有仨属性。其中呢,这两个呢,是来自于我们的父类啊,这个呢是他自己的。啊,那对于P来讲的话呢,它不就只有俩吗。就这俩是吧。诶就可以了啊行,诶咱们想让大家看呢,也就是这样的一个情况,诶接下来的话,你说这个程序那就放开,往后就执行吧,啊一直结束就得了,诶我们就点这个按钮就行啊一走直接呢就结束了。OK啊好,这个呢,你不想要这个了,你就再点一下左键就可以了。哎,通过刚才这个呢,大家能看到这样一个场景啊,好,接着我们再去说子类呢,就获取到了傅雷中声明的所有的属性和方法。
29:05
啊,那我抛一个场景,大家看这是person,这个是age,我在这age前面呢,加了一个private。加了一个私有的这样一个声明,那么我们在这个,诶,人家这个person自己这个类里边,比如说我们在这儿。哎,咱们这块呢,Avoid,我来一个show。诶,这呢,我去打印一下我这个A冒号。哎,加上一个A,那我就直接打印了哈,在自己这个类里边呢,它是能掉的。那么放到我们这个student这个类里边,继承了person了,那我们这里边儿如果要定义一个方法。比如我叫呃受一是吧,你说我们能去调那个A吗?你看我们打印一下是吧,说age冒号加上一个age,你看这时候呢,它就报错了是吧。哎,说你这个呢,有一个私有的一个权限是吧,就不行。
30:00
哎,这个时候不行,是因为呢,我们这个私有的已经说清楚了啊,说你只能在本类中用是吧,然后你此类中就不能用了,咱不能说呢,现在有了继承了,说封装性就被打破了,那不是彼此之间矛盾了吗?哎,你的继承性呢,不应该影响封装性啊。诶,所以这块呢,不能用还是不能用。但是我们想一想,那这事算不算继承道了呢?对。哎,这个呢,大家要把握好啊,就是继承呢,还是继承过来了,但是呢不能够用是吧。诶,你比如说你看啊,我这写个我叫A1,他也爆红,你看他爆红的是说你这没有这个变量是吧。但我这我写A的话呢,他虽然也爆红,但是他说的是你是一个私有权限。只是说呢,你有,但是不能访问而已。啊,就跟你爸呢,把他的一些。好东西都给你了是吧?呃,其中呢,有一个东西呢,锁着锁呢,说呢,这个东西虽然给你了啊,你有所有权了是吧,但是呢,你不能直接访问。那这是我当年年轻的时候的小秘密是吧?
31:04
对,18岁以后才能看是吧,说其实啊,你。怎么着是吧,不是亲生的哈,是吧,诶。对,这就是一个小秘密啊,就是给你了,但是你不能直接用啊,这个大家要注意一下这个问题哈。好,那么这时候呢,我们只能是把它注释掉啊,那回过来诶说呢子类呢,就获取到了这块,想强调就是所有啊,然后接下来啊,呃,但是啊。但是啊,由于啊封装性的影响。啊,可能子类呢。不能直接。哎,调用哎副类中声明的这个属性或方法。诶,这个大家呢,要去体会啊,也就是说我们不能有了继承性以后呢,封装性就被打破了,这不合适啊,同样的道理,你看回到这个位置啊,我这块还在这打一个断点,然后我们再去呢,右键也行啊,叫debug。哎,光标还在这儿,我再往下走一行,然后这时候你还去看这个student,你看还是有仨属性啊。
32:03
A,照样有,只不过呢,就是你不能直接掉而已了。啊,这块我们再让他走到最后啊,你别说你不能掉,你除了我们这个person类之外呢,我们这个person他自己他想调这个位置他都调不了。啊,这个呢,12岁是吧,他都掉不了啊,那你也掉不了,只不过就是因为大家都受哎封装性的影响而已啊。12是吧,这个你也不行。不行,那就不行呗,如果说你我在子类中就想用,想用的话,那你就提供它的是盖菜方法就行。对啊,你比如说针对这个age,咱们在后边写一个啊,Alt加上insert。我就针对这个age啊,咱们去提供一个gas。这就写好了,那写好以后的话呢,你看这俩方法可是公共的了,那16吨的是不是就有了。哎,C流量以后呢,我们这时候呢,我不直接调你一支了,反正我在这里边儿,我我还是有这个需求啊诶。我就回到这儿。说A啊冒号诶,然后加上那我就GET1不就完了吗。哎,相当于呢,你直接让我访问不行了,那我就通过方法来访问。
33:01
所以呢,这时候啊,你说有吗?有啊啊,那属性不能直接调,那就调方法呗,方法能够对你啊进行一个调用,那可以啊。啊,没有问题啊。这两句话大家要体会一下啊,有的人就说说你看这个有了封装性了,所以你这块呢,就拿不到这个属性了,注意是不对的啊,哎,是能拿到的,只不过不能访问而已。好,这个呢,就是我们体现这个继承性的直观的一个表达了,那么接下来说呢,子类呢,继承了父类了。啊,你也看到了,我们在这个死里边哈,我除了呢,哎,拿到负类中生命的这个属性和方法之外呢。包括这个get的方法其实也有了是吧?诶我们是不是还定义了自己特有的这个属性和方法了。所以从这个角度上来讲,你说这个子类的功能强大呀,还是父类的功能强大呀?对,很显然呢,是子类。啊,就像咱刚才呢,咱们说这个,呃,比如说手机的这个界面上的具体的这些视图也是一样啊呃,就是具体的这些视图,不管你是个按钮啊,是个可编辑的这个文本啊是吧,还是一个具体的一个就是个文本框啊啊等等的是吧?诶大家呢,都是继承于这个叫view了。
34:10
这个view的话呢,就相对来说抽象一些啊,诶,那你继承以后呢,你的这个功能肯定比他要多,因为你拿到它的这个属性的同时啊,自己还可以定义自己特有的。OK啊。那从这个角度来讲,我们写一下啊,说子类在继承父类以后啊,还可以啊扩展。哎,自己,哎特有的这个功能。啊,那么这个功能的这个体现呢,就是呃增加呃新的这个,或者叫增加自己特有的啊这个呃属性。哎,或者是这个方法。哎,从另个角度上来讲呢,大家你看啊,咱们这个单词呢,叫做extend,刚才呢,咱们翻译成了叫做继承了,实际上呢,这个单词呢,你要放在这个词典里边去查呢。对,他叫延展扩展。是吧,啊或者对,或者叫延伸。
35:02
啊,这样的这个词。哎,那你看啊说呢,这个叫student,这是个类,这个类呢叫延展扩展了这个类。啊,那你看这是一个类有功能,然后我呢,在你的基础上我还扩展了。那说明呢,我呢比你是不是就更强大一些是吧。哎,这个注意一下啊好,所以这块的话呢,大家去理解这个概念。啊父类子类啊,就咱们一开始讲的这个郭德纲跟郭麒麟一样是吧?诶首先呢,继承了他的这种啊相关的一些天赋是吧?哎,比如说口才比较好,哎,这算是直接拿过来的啊哎另外呢,他呢,诶比他富联呢,这个功能更强大是吧,这个人家这个做偶像就做的就挺成功的是吧。哎,这个呢,就是它更好一些了,包括呢,我们看那个电影里边那个。那个叫异形。看过那个系列不?是吧,有点这个暴力一样是吧?哎,那疫情呢,你看一代一代去迭代,越迭代越强是吧?哎,那就是他这个子类呢,比父类呢要强大啊。
36:01
OK啊,这个呢,就我们说的这叫一寸的这个功能这块的话呢,大家啊,要区别于是吧。就是子类跟父类的概念啊。或者叫他俩的这个理解。啊,要区别于啊,叫做集合和子集的这个概念啊。这个咱们上这个高中的时候呢,讲过集合和子集,说这呢是一个集合啊,比如说有12S3S45,诶这样呢,是一个集合的元素哈,然后呢,其中呢,你把这个四跟五呢,哎,放到一个子集当中了。啊,这个呢,叫子集。诶,那么集合里边呢,这个子集跟外边这个所谓的这个叫集合,他俩呢,跟我们这里边刻画的关系正好相反。子集的东西少,集合的东西多,而我们现在呢,是子集的功能更丰富。啊,然后这个呃,子类的这个功能更丰富,父类呢,反而说这个要。相对来说少一点了。啊,这个注意一下啊,好,这个呢,就咱们说诶给大家强调的这样一个点啊,就写到这儿了啊包括呢,那会儿我们还说到一个事儿啊,诶子类这块呢,能够会到父类的,还可以定义自己特有的这个我们当时提到个事儿,说不要为了继承而继承是吧。
37:13
啊,继承而。继承啊,呃,这个呢,我们必须要在继承之前啊判断一下。哎,是否有,是不是is a的这种关系啊。有这种关系的话呢,你可以考虑呢去继承。哎,就可以了啊好,那么关于咱们这个继承的核心的这个点呢,其实就说清楚了。OK啊好,那下边这块我们再提一个这样的一个小问题,说呢继承诶回到我们这个问题这块啊,大家呢,以前啊,不知道有没有发现这样的特点,什么特点呢?你看我这个P,我去点的时候哈。我点的时候呢,呃,一方面呢啊,有它自己的这样的一些属性些在下边了啊,我们就不考虑这个属性的事儿了,咱就看方法啊,我们在这个person里边呢,定义了盖赛的配置的这个方法。然后呢,有eat方法,有售方法,有sleep方法,然后你还会发现呢,诶怎么还多一些东西你看。
38:06
诶,那么这些方法呢,言外之意呢,我们也可以直接调是吧,比如说这里边儿有一个,诶这个叫土润吧。好,那我这块直接就调一个图准。诶,这呢,返回的是个字符串,我们就直接打印一下了。就这样,你发现他,他也没报错。呃,言外之呢,就是我们这个,呃,所谓的这个对象哈。啊,对应的这个类里边是有这个方法的。嗯,他的这个兔死率呢,默认打印的其实还是你这个对象的地址。哎,打的就是这个地址,这就是我们调的这个方法的一个特点啊。啊,细节呢,你先不用管,那我们想说的事儿呢,就是你这里边儿有这个方法,那person呢,显然没定义。那我们就要问,从哪儿来的?对诶,那现在我们讲了继承了哈,你自己没有定义,如果你调一个功能还有,那只能说来自于。你的负累是吧?对,那就是我们的问题,就是说他的父类是谁?诶对,我们这块呢,你你你只能这样了啊,你看我按住CTRL键,这图词呢,就变成超链接了回点。
39:05
我是不是就知道它来自于哪儿了?哎,然后你看来这里。Object啊,那这个object的话呢,诶,我往上一翻,是这个LA下的还是挺核心的一个类了啊,那其实这块呢,我们想说的就是person类的负类呢。是。啊,那到底是不是呢?我们也可以在这来验证哈。哎,怎么验证呢,你看这样这个呢,咱们就讲后边呢,遇到的一个新的知识点,咱们先借用一下啊,诶比如以这个student为例,我呢拿着这个student首先呢叫get class啊。啊对,获取你所属的这个类是吧,然后呢,我们再去get你的叫super class。是不是咱们知道说负类是不是叫super class?所以呢,就是你这个对象,你所属的类其实就是student类了啊,Student那个类呢的父类是谁。哎,就这个意思啊,Run一下。哎,这个你会发现呢,它的负列呢,是不是就是person类。
40:02
没问题,好,那我们接着啊,把它复制一份,这呢我改成叫P是吧。She。Person呗,哎,Person呢,你的所属的类啊,这个对象所类就是person类,Person类的父类。好,来这会我们查看一下啊。哎,这边你看是不是就塌了。哎,这个呢,就是我们说,诶通过代码我们去验证一下了,哎,这这这呢,属于咱们这个超纲的内容啊。超纲了啊,大家呢,就先理解下就行,干什么事儿呢啊叫获取啊S1。这个所。鼠啊类的,哎父类,哎,然后呢,同样的啊。下边这个啊,获取这个P是吧。哎P哎,所属类的负类,所属类呢,不就是person类吗?它的福类啊。这个打印结果呢,是他。好,那由这个出发呢,我们回过来啊,在这个位置啊,这就提到了啊,波类呢,我们没有显示的指明它的负类。
41:02
哎,当一个类啊,没有显示的指明它的负类的时候。哎,它默认呢,就继承了一个类。啊,就叫做这个类是吧,这呢我再说一下啊。呃,这个呃,Java中,哎声明的。啊,生命的泪啊。如果没有显示的。哎,声明其啊父类时。哎,则我们说默认继承于。诶,这个类。哎,这就可以了。这个就OK了啊,行,大家体会一下好,那么这个你要清楚以后的话呢,那顺带着啊,咱们再写几个补充,比如说。啊,看注意听了啊,有同学开始困了。大脑已经开始空转了是吧?眼神变得非常的温柔啊。嗯。来,注意一下啊,温柔的眼神看看你的同桌是吧?他可能觉得你有误解是吧?
42:01
好来接着看这个啊,比如说什么呢?诶现在问一个问题,这个student跟这个object这是什么关系。是吧,所以这个按正常来讲的话呢,这是object,这是这是student。这样说就该叫爷爷了是吧?啊,这是他这个好吧,啊,这是他爸的爸是吧?呃,这块叫爷爷了,但是咱们这里边儿没有这个爷爷类这个叫法啊,因为这块呢,万一要上面还有呢,这个杂交呢,太爷爷了是吧,那要再来几个呢。这个词汇就有点儿乏力了,是吧。对,咱这个中国的这个叫法,这还算比较丰富了,你要像这个到德应用体系里边,那太简单了啊。对,书啊什么的,这个这大家都一个叫法是吧,嗯,那个词儿就更更乏力了啊。对,所以这块的话呢,诶我们就得明确一下这里边这个关系了啊,诶这里边儿关系呢,就涉及到我们JA瓦中这个继承的这种层次的这种关系啊OK,行拉回来啊,咱们回过来说一下啊,往后走。
43:05
再看这啊。诶说呢,Java支持呢,叫多层继承的这种关系啊,你看这块呢,我们也写这个object了啊,诶我是这样写的,说这呢叫person类,然后student的话呢,就继承于person类了,然后student的话呢,它也可以再有此类。比如。这,这叫这是什么?叫毕业生,对,或者叫研究生是吧。哎,这样的一个层次关系啊,那么这里边儿的话呢,诶,我们如果看这俩它叫做父类,子student呢,叫做子类,呃,在这儿叫子类啊,然后呢,你要是看这俩关系呢。他就成了负类了。哎呢,就成了子类了。啊,就成这样了啊,所以说这块呢,我们就提到了,你看这个磁浮类呢,首先它是相对的概念。说你爸呢,针对于你来讲,他是你爸。那这对你爷爷来讲,他就生儿子了是吧?哎,所以它是一个相对的概念啊。这么说,任何的。
44:00
这个什么,这爷爷都是从孙子这块来的是吧。一点点这个就上去了啊好,首先呢,子浮类呢,是相对概念啊,其次的话呢,我们这个person类呢,还有子类,子类呢还有可以还可以有此类,这就我们所谓的叫多层的这种啊继承关系。诶,Java呢是支持的,毫无疑问啊,你说要不支持就这一层,那你这个功能扩展也太有限了。啊,你在这个基础之上呢,你扩展了,然后我还可以激励你再去扩展,这多强大是吧,所以这叫多层继承。啊OK,然后呢话呢,我们这个person类呢,涉及了很多功能啊,这个功能你子类能够用,说光有一个子类那也不行啊,当然这功能使用的也太有限了,诶我们可以有多个子类吗。哎,在我们这儿的话呢,就是没有这个计划生育之说是吧。你可以放开了生啊,哎,你这一个父亲可以有多个儿子。当然咱说叫一个母亲也行,就是你说他这叫父类,这要是这个国外的话呢,这块又得讲究这歧视是吧。为什么不叫母类呢?这个国外呢,现在感觉这个所谓的民主啊,或者男女平等,就有时候都极端了哈。
45:03
前两天看了一个新闻。不知道大家看没看啊,美国选美呢?是吧,选美就选美吧,你好歹得是个女的呀,是吧,但是这个这个女呢,你得怎么去判定是吧。好歹以前的话呢,你生理上得是个女生是吧,女性哈。然后现在奇葩道呢,就是选了一个男的是生理上就是个男的,他认为他是女的。也可以是吧。对,就像大家呢,现在你突然说,你说我是女的,大家觉得你虽然你物理上是一个男的属性是吧,但你说我就认同我是女生,也可以是美国现在就这样。这个都已经有点走火入魔了都啊。啊行,这这这拉回来啊,这个咱们就不叫母类啊,这叫父类啊。啊,这个不叫这个女儿类哈,就子类是吧。好,哎,就这块儿的话,你可以有多个子类哈。啊,所以呢,你一个父类呢,可以被多个子类呢所继承。哎,这是没问题的啊。
46:01
反过来啊。反过来你看我刚才讲的这个事儿呢,符合我们的认知,但是它都是知识点啊,反过来什么意思呢?你说一个子类呢,可以有多个父类吗?不可以吗?你说这事多好,你说我呢,继承负类,你看功能立马扩展了是吧,我再加持一个负类。这技能又暴增是吧,我再认一个负类。呃,跟历史上的某些人物一样是吧?呃,这个自己一个,这个血缘上的一个亲爹,再整俩干爹是吧。功能就很强大了是吧,想着都爽是吧,哎,但是注意不行啊,诶Java当中呢,咱们不允许你有这种。多个傅雷啊,比如说这种继承呢,咱们起个词儿叫单继承性。哎,这呢是一个此类,此类的话呢,诶,你这块我整仨父类不行,只能有一个父类,这就叫单继承性,不支持多重继承,这就叫多重继承。啊,是不行的啊。啊,一说到这儿的话呢,我就想到小时候看的一个。
47:00
动画片了是吧。大家呢,可能大家看过没。看过的一个般年龄应该都是大一些了,是吧。我现在感觉现在在想这个动画片,我觉得这里边儿都有阴影是吧,小时候从来没这样想过是吧。就是他俩长得真不像。他跟他王叔叔长得是真是一个母的一块刻的呀,是吧?还经常来他家吃饭是吧?你说小时候这个编辑。他他咋想的是吧。现在想想都是噩梦是吧?这个原来这里边儿都有好多内涵是吧。不敢想啊。这只能有一个。这个血缘上的关系是吧,到底是谁呢?这个咱就不知道了啊。好,诶这个呢,就是想给大家强调这个点,哎,那么拉回来这呢,我们想说的这几个事儿啊,哎。哎,首先呢,我们说那Java呢是支持。哎,咱们叫支持叫多重多层是吧,集成啊。注意是多层继承,不是多重啊,多层的意思呢,就是你可以有子类,子类还可以再有子类。
48:03
啊,这样的一个关系啊,这叫多层一成,诶这块呢,引申出来呢,我们还有这个,呃一组词啊,比如说这里边儿这个,呃,咱们看谁呢,看graduate啊,它的父类呢,我们说叫student了。那他其实student还有雷是吧,那这块我们怎么叫的问题哈,诶我们把这个student呢叫做graduate,叫直接。对,然后呢,这个person呢,叫做graduate的叫间接弗类,包括呢,Person呢,它默认如果没写类,是不是还有object。对欧债呢,这也都属于叫,诶它graduated叫间接雷啊。所以这呢,我们就相当于又引出了一组词,因为它只是多层继承啊,所以我们就这块儿引出来叫诶直接。啊,这个又是新的这个概念了。哎,直接负类啊,间接负类OK啊这呢,我们引出的这个新的概念啊,知道这个意思就行好,然后呢,我们提到说,诶Java中的。哎,叫指腹类的。
49:03
对啊,子父类它的这个概念呢,是相对的是吧?哎,Student呢,你相对于person呢,就叫此类了,相较great,这就成父类了啊好,这是我们说的这个特点啊,下一个问题啊。哎说哎Java中。哎,扎住是吧,呃,一个父类啊,可以声明啊,多个子类。不要可以扩展为多个子类啊,反之。不成立是吧,反之不成立呢,只是说呢,就是一个子类。哎,只能有一个负类,诶把这种特点呢,我们称为呢,叫Java的单继承性。哎,这样的一个特点,注意我这块呢,再强调一下,咱们这个单继承性啊,它是指的是在类这个层面的。后边呢,我们还会讲一个概念叫做接口啊,这个接口的话呢,它可以有多个负接口。啊,用的这个关键词呢,也是。哎,就是接口这块呢,是可以多继承的啊,在类这块呢,只能是单继承,一个儿子只能有一个父亲。
50:03
OK啊行,这个呢,就是我们想给大家补充的这个点啊,那么其实呢,关于继承性的核心内容啊,也就这些啊,诶就完事儿了,行,那么一会儿过来呢,我们就做一下相关的练习就行。好,大家呢,休息一会儿啊。
我来说两句