00:00
那关于抽象的这个内容的话呢,咱们就讲到这儿了啊,那么接下来的话呢,我们看一看这个抽象啊,它相应的一些这个应用了,这个应用的话呢,这块呃,写了一个例子,这个例子的话呢,是这样的说呢,在一个航运系统当中,这儿呢叫呃vehicle这呢表示的就是交通工具这样一个类,呃,这个航运公司嘛,这个交通工具呢,这个类呢,显然它就是一个负类出现了,具体的话呢,它有比如说卡车呀,驳船呀,啊这都算具体的这个交通工具了。啊,那么在这个,呃,Vehicle这个交通工具这个类里边呢,它有两个方法,叫计算运输工具的燃料效率和行驶距离这样的一个功能,但这个功能的话呢,因为你是非常不明确的这样一个交通工具了,所以说这两个方法呢,只能说有功能没有具体的实现了,所以呢,我们就把这两个方法呢,自然而然的就设计成是抽象方法了。哎,那同时的话呢,这个类呢,也就是个臭氧类。哎,我们也很好理解哈,你在具体的这个项目具体的实施当中,你肯定不能说去拗个交通工具,到底你这拗了个啥呀。诶,所以呢,我们具体在使用的时候呢,肯定是具体的,你是个卡车呀,还是一个船呀,是吧,都得是造它的子类的对象了,我们让子类呢,继承这个父类的同时呢,我们就把这个相应的这个抽样方法呢,就提供它的这个实现了。
01:11
那因为呢,你是卡车和船了,具体就很明确了,它的这个燃料效率啊,行驶距离啊都可以写,然后在具体的你需要用到啊vehicle。比如说呢,你相应的有这个行参是vehicle的时候呢,照样的船的是卡车和这个船的对象,所以呢,该体现多态性,还体现多态性啊就可以了。前面呢,咱们说过一句话啊,说如果要是没有多肽的话呢,这个抽象类和接口的存在就没有意义了,接口咱们还没讲,那你看一下这个抽象类,那如果说我们看到一个方法的行参呢,写的就是这个vehicle这个副类。哎,你想这时候呢,如果哎不让你用多肽。啊,他自己呢,还不能找对象。然后呢,你还不让用多肽,那这个呢,声明你不能往,就不知道该往里传啥了。哎,所以呢,必须要用多肽。OK啊好,这呢是一个应用,然后第二个应用的话呢,这块我们再讲一个设计模式,这个设计模式呢,大家就不用过多的去深究了,就当成是我们抽象的一个应用的案例,一个代码就可以了。
02:12
这个呢,叫做模板方法的设计模式。哎,你看这是怎么回事儿啊,呃,它呢,就是呃,我们整个抽象类的时候就体现了,实际上是一种模板的设计了,诶然后怎么着,具体这块呢,我们就来看这啊。说呢,当这个类当中的功能一部分呢,是确定的。那我们把这种方法呢,就理解成了,就是普通的这种非静态非抽象的方法了,那另外一部分这个功能呢,如果它是不确定的,那我们就把这部分功能对应的方法呢,给它抽象化。那么抽象化的这种方法的话呢,我们暴露出去以后呢,让子类呢,必须呢去实现一下,否则的话呢,你子类也是传类了。所以呢,我们就是把不确定部分呢暴露出去,把确定部分呢,就直接呢固定下来,这其实就是一种模板。哎,大家你想象一下我们这个大学呢,你四六级考试过,或者高考或者考研等等,诶只要涉及到英语的地方呢,作文我们是不是都会背一些模板是吧。
03:10
不背的话呢,那有点太过分了,就是吧,不是特别厉害,就是特别菜了是吧?诶正常咱们都得是背模板啊,那模板的话呢,诶就意味着其实有一些东西呢,它是确定的。就是比如说啊,有这个图能得到什么什么是吧,哎,怎么怎么着,像那个不确定部分呢,就是根据你具体这个一个话题啊,或者一个图啊,那你去去填的这个内容。这就是不确定的部分,那这个不确定部分呢,在我们这里呢,就好比是这个抽象方法确定的部分呢,就已经给你写好了。啊,我还记得当年考研的时候呢,就记得。这个一个名名言是吧,就是条条大路通罗马是吧。Or to Roman?对,就是相当于呢,你这个,哎,好多地方都可以用这句话是吧,OK啊行,这个是一个模板,然后呢,还有呢,小时候呢,嗯,这个做这个月饼啊,呃,不知道大家呢,见没见过这个东西。
04:03
对,就是这个模子啊。对,你把这个,呃,这个馅儿呢,放到这个面里边,然后呢,往这里边儿一扣啊,然后呢一夹,接着呢再去就出来了,成型以后呢,你再给它。做熟就可以了是吧,这就是一个模板,按照这个模子呢来就可以了。OK啊行,那这里呢,其实体现的都算是我们生活当中的啊,和平时我们遇到的这样的一个模板,那在代码里边怎么去体现呢?咱们可以呢,写一个啊。好,那就在我们这个叫template啊,Template的话呢,翻译过来就是模板的意思了。啊,这块我们就写一个啊,哎,Temp。呃,关于它的一个测试。好,这呢叫哎模板。哎,方法的。呃,设计模式啊,这个的话呢,大家你不用去像单利一样,我们去说有几种方式有什么区别,优缺点是什么,我们就不用整的那么重了,这呢就看到是我们抽象的一个具体的应用的案例啊。好,嗯,我这儿呢,想写这样的一个例子啊,嗯,比如说嗯,首先呢,我去声明一个负类,不妨呢,这个负类呢,我们就称为呢,叫呃template吧。
05:08
就它啊说这个类里边呢,我定义两个方法啊,其中一个方法呢,是这个啊,我们叫做spend。啊,Time说花费的这个时间,这个方法做什么用呢?我们想去,嗯,计算某段代码的执行所需要花费的时间。啊,某段代码的。执行。哎,需要花费的这个时间,好,那既然这样的话呢,我们首先呢,你得有一个开始的时间,System current minutes这个呢,我们记住为呢是一个叫start。然后呢,我们去计算某段代码,说执行花费的时间,哪段代码呢,不确定。诶不确定这个代码呢,不妨我呢就写到一个方法当中了。我就称为呢叫code,那这个方法呢,既然这个就是代码就放在这个方法体里了啊,但是这个代码不确定不确定,我就把这个方法呢给它抽象化了。
06:03
我会这样写的啊,抽象的这样一个方法,好,抽象方法呢,所属的类,这里是一个抽象类了。好,我就这样的加了一下。啊,这个。这个往前移呗,应该是吧,好,那么这个方法呢,我们就在这个位置呢,我去调一下啊。相当于呢,就是记录一个时间啊,把这个代码呢,执行完了,执行完以后呢,我们再去记录一个时间。这个呢称为呢叫N,接下来呢,把这两个值呢做一个相减。说花费的这个时间。啊,为。哎,这个我们就让这个。End呢?减去我们的start。哎,这样呢就可以了。啊,这个代码呢,相对来说是比较清晰的啊,那么你具体执行的是什么代码呢?这个事儿呢,我就不确定了,呃,交给这个子类呢去具体的实现,比如说我们这边的生命和class,我们叫做print。假设咱们就还是以前讲的那个质数的输出哈,Print叫prime。
07:01
哎,Number是哎,让他呢去继承于这个template。好,那么继承你上面这类的时候呢,相应的这个出样方法呢,你必须要实现一下,否则你就不能够去实例化了啊,诶我们这块呢,Alt加回车啊,直接呢,你这块把这个方法呢调出来,诶我们就写一下啊这个代码的话呢,咱们就。快速的写一下了啊,比如说方循环in特I呢从二开始,I呢小于等于咱们当时是10万是吧,An加加。好在这里边的话呢,我们接着for啊in一个接从二开始接呢,小于等于ma点。开方啊,这个我们把AI呢放进去,像这个呢,都是调到这个静态方法了啊。然后呢,这个阶呢,再加加一下,哎,判断一下啊,说如果呢,I呢取模这个阶呢,等等于零了,那就表示呢,你不是一个质数了,哎,咱们呢,在这个位置啊,比如说定一个波尔型的。Is flag是吧,假设呢,这是个,然后在这里边呢,我就给你改成一个false。
08:02
哎,这么着了,好,那么同时的话呢,你已经不是个指数了,我就不break了,除了这个负号以后呢,在这个位置我们判断一下啊,这个is flag,如果呢,你要还是个处,说明你当初就没有进去过,那说明呢,你就是一个我们要的这个质数啊,我就这个I这就是了,是吧。啊,然后呢,回过去以后呢,由于我们这个布尔类型变量我写到这个里边了,所以呢,也不用考虑呢重置的问题了啊,因为呢,每一个I呢,都会重新声明一个这样的变量,这呢就是我们写的这个代码。原来写的时候呢,还挺费劲,现在写好点不?现在写都忘了是吧。啊对,正常来讲的话呢,现在你再去理解它的话呢,应该比原来会更好一点啊呃,因为你整个这个代码量呢,越写越多,其实积累越来越多呢,你写起来呢,就越来越舒服一些啊好,那么这个写完以后的话呢,诶就完事了啊接着的话呢,你看我来这个测试类里边啊写一个main方法,我们呢就创建你这个此类的对象。啊,这个呢,我们就叫个P啊,哎,New一个它所以说呢,你这块用不用多肽,这都是次要的啊,就我这块呢,写成这个负类声明了,哎这都可以,现在的话呢,我通过这个P呢,我去调谁呢,我调这个spend time。
09:10
诶,我叫他哈,诶为什么叫他呢?我想计算一下我这代码花费了多长时间,诶那么哪段代码呢?我在我这个子类里边都已经写的很清楚了,就是这个code。我现在调的是父类继承过来的这个方法。哎,你在调的时候呢,执行了它了,在执行它的时候呢,注意前面有个C点。父类的方法是不是就被我们子类给覆盖了?所以呢,这块实际执行的就是你此类的这个方法了。呃,那进而的话呢,再把这个时间呢,就计算出来了,这就是一种模板的这种方式。哎,我们做一个运行。你看这块就38毫秒是吧,上面就把这个数量都打出来了。OK啊,这个呢,就是我们想给大家呢举的一个例子啊,啊一个例子啊,那么这个例子说完之后呢,诶,我们可以呢,再去体会一个例子,这块呢,我就又写了一个,提前写好了,就没必要我们再写了啊这个呢,我们看看它是一个什么样的场景啊。
10:04
这个呢,比如说我们去这个银行啊,办相关的这个业务了,所以这块你看我提供了叫银行相关的这种模板的方法。哎,那么我们去银行的时候呢,大家多少都去过哈,像我们办的这个一个相关的这个事情,呃,一般呢,我们都会有一个整体的流程。哎,你看这个流程这块,我还加了个final啊,就这个方法呢,你就别重写了。这个呢,诶可以加上啊,诶去银行的时候呢,我们其实就想调这个方法,先上来呢,你先取个号。哎,这个取号的方法呢,提前也写好了取号啊,取完号以后呢,这块就等着叫你了,叫你的时候呢,你就办相关的业务。当然每个人的业务呢不一样。所以业务这个事儿呢,没有办法去确定。所以呢,我们就把它呢给抽象化了。把队员暴露出去啊,这是不确定的部分,然后呢,这个业务你办完之后呢,最后呢,通常会有一个反馈的评分。啊,所以这个呢,就是评分的意思啊,评价的意思了啊,再调一下这个方法,这些呢,都是属于有方法体的方法了。
11:03
那具体你办的业务呢,不一样好不确定的部分呢,我们把它抛出去,呃,让你具体的此类呢去继承,去重写,呃这块呢,假设呢,你是想取钱的哈,我就让这个类呢去继承你这个负类,然后呢,因为你有个抽样方法,你把这个抽样方法呢给重写一下,说我要取钱。其他的方法不用重写。呃,那还有人呢,他这块呢,是讲理财的啊,你想理财,那你也继承于这个抽象的这个类,把这个transa这样的一个方法呢,给重写一下。哎,这样的话呢,哎,你呢,都是可以创建对象的了。好。完事了啊,接着我们就可以呢,做具体的这个测试了。测试的时候呢,呃,具体你想取钱,你就用一个这个抽象类的这个子类啊,付给负类也行,不付呢也可以啊,这呢就是一个多肽了,然后呢,拿着它呢,我们去调这个叫process。哎,就是你new的这个子类呢,它也继承了父类当中的这个方法了。所以呢,你上来呢,就先取号,取号以后呢,你去办业务,然后呢去给评分,这个业务呢,就是你自己重启的这个方法。
12:05
就是你要取钱。哎,所以这块我们把下边这个呢,暂且呢,比如先注释一下,哎,做一个run。诶,这不就是该取号取号该评分评分,中间这块呢,就是你要干什么,诶你要取钱是吧?诶下边呢也同样呢,这是一组这个操作了。这块我们比如来一个换行啊再来。好,下边呢,你另外这个事儿呢,就也是啊process呢,这个方法已经写好了,上来也是啊,先取号,然后呢,你要干什么呢,这块你已经重写了,你要理财。然后最后呢,来一个评分啊,这块还有评分。啊这呢体现的也是一个诶模板这样一个特征,诶回过来我们再看一下刚才提到的这句话啊说呢,当功能内的一部分的功能是确定的,呃,另外一部分不确定的时候呢,我们就把不确定那个呢给暴露出去,让子类呢去实现。刚才呢,举了两个例子啊,大家体会一下,凡是有父类当中有方法体的呢,这都是确定的了,没有方法体的这个呢,都是不确定的,我们就给抽象化了,子类这块你继承的时候呢,你去重写一下。
13:05
那就可以了啊。好,这呢就是我们的一个应用啊,大家呢,呃,不用费力深究,说这个设计模式怎么有什么好处,有什么缺点,不用研究这个了啊,你就可以当成一个例子呢,去体会体会啊就行。好,那么这个呢,我们就说到这儿了,下边的话呢,我们来看一看关于抽象这块的这个练习题,哎,首先呢,我们来看第一个啊,第一个的话呢,是这样的说,针对于多态性的练习一,当时咱们写过这个几何图形,对它呢进行一个升级,体现了这个抽象的一个应用。啊,那我们这块就找一下啊,当初咱们讲的这个多态性。哎,在这儿呢啊,多态型里边的这个练习一啊,这是我们提到的这样的几组关系啊,CTRLC一下,然后把这个呢,直接粘到我们现有的这个题目当中。哎,这就可以了,好,这块怎么做升级呢?哎,其实呢,原来我们写这个练习题的时候呢,就是体现了这个叫继承性的特点了。现在的话呢,其实就是在原有的基础上呢,做一个修改,比如说咱们当初呢,写这个几何图形的时候呢,说有一个叫求面积的方法,当时我们在这纠结了很久。
14:07
啊,说这块到底返回什么是吧,呃,其实现在来看的话呢,这个方法呢,我们根本就不用呢去提供它的方法体了,因为呢不确定。所以呢,我们就可以把它呢抽象化。那抽象化以后呢,当前这个类呢。就是个抽样类了。然后呢,这道题就写完了哈。你看因为呢,咱们在这个具体的这个此类当中,呃,其实之前已经把这个方法都重写过了是吧。哎,对于这个句型来讲,也是一样的道理。反而呢,你要是不重写的时候呢,它这块还提示我们有错呢。啊,你要没重写这块呢,因为你里边包含一个抽样方法,哎,这个此类呢,也继承过来了,说你要不你是抽样类哈,你要是想造对象呢,那你必须要诶重写一下,相当于这块还提示我们呢,要做一个重写。呃,写上以后,诶这块该怎么跑还怎么跑啊,你该用这个多肽的场景,还用这块,我们在多肽的时候呢,这不是,诶放到这个声明的是负类啊,因为呢,这个负类的已经不能够造对象了啊,还是抽象类了,那你传呢,就传此类的对象就完了。
15:09
哎,所以这块也是我们强调的说在抽象这块啊,一定要用多肽啊。OK,好,这呢就是咱们的第一道题。然后接着第二道题呢,相对来说呢,这个就大一些了啊,来我们看一看。说呢编写了一个叫工资系统啊,实际上呢,不同类型的员工按月呢发放工资啊,如果呢,某个月呢,是某个员工的生日呢,给他呢多加100块钱。哎,就这样个意思啊。好,这里边儿呢,涉及到了一些这个类,咱们就一个一个来了,首先第一个呢,叫做员工类employee,好,那我们就去创建一个employee啊。那么这个类呢,如何设计呢?这块已经有提示了,CTRLC。我们粘过来。哎,这呢,我们就开始写啊。这呢,Private这个是一个MY型,MY呢还是我们自定义的。
16:06
啊,那不行,你这块先等等,先写这个吧。这叫my date啊,CTRLC。先来处理它。好再回过来,诶把这个呢,CTRLC啊粘过来。好,我们先来写这个类吧,说这个类里边呢,有这样的几个属性哈,诶,就是private声明的,呃,因特型的叫做。啊。啊,应对性的一个D好可以了啊,接着来说要提供必要的构造器,那我们首先呢,通常习惯上呢,整一个空餐的。这样一个这个全餐的啊。好,然后接着的话呢,呃,既然有这个私有的这个属性了,我们必要的这个概率方法呢,我们也给大家提供一下。哎,三个呢都选中,哎,搞定了。呃,接着呢,有一个方法叫to date string,这个方法调用完以后呢,返回,呃,日期对应的某年某月某日啊,其实就类似于to string方法了啊。
17:06
所以这块呢,我们这么着啊。嗯,Public,哎,返回是一个string这样子。哎,这个我们就直接return哈,某年某月某日。年。哎,年是吧。月。嗯,对。行,哎,返回一个它就可以了啊。啊,多了一个小括号。好,这个呢,我们就写完了。好写完以后呢,回到我们这个employee这块呢,我们开始写这个employee啊,说呢private声明的123啊。Rabbit。词形的name。这个没说,那就in吧,Number啊工号,然后呢是一个my date类型的。啊,一个叫birthday。哎,这样就可以了啊。好,提供必要构造器,那同样的我们这块还是两个啊,这个构造器这块呢,你注意呃,我习惯性的都是写俩了,但没有说我们在开发的时候呢,说只提供俩哈,空三的一般都会提供。
18:12
啊,以后呢,我们会提到反射呢,还会提这个事儿啊呃,算是基于两方面吧,一方面就是以后我们造对象的时候,其实好多时候都是通过反射造的啊,都会用空餐。嗯,当然这个事儿呢,你就当我没说些啊,还有一个原因呢,就是因为我们对于此类来讲呢,呃,子类呢,你呃这个写构造器也好,或者不写构造器也好,它都会首行呢,默认是super空嘛,是吧,所以呢,我们提供一个super空呢,就保证了你不报错哈。哎,这样。主要原因还是反射的事儿啊,以后再说啊,然后这个全餐呢,是为了方便呢,我们造对象的时候呢,顺带着把这个属性呢,就全给附上值了啊,你说我就想提供一个一个的两个的都行,这个呢是非常灵活的啊。然后接着呢,我们必要的提供该方法。哎,这个都有。然后呢,这块有一个他哈,说有一个abstract的一个方法叫earnings啊,说返回公司的一个数额,他说你挣多少钱啊,嗯,这块呢,说了又返回了,是个抽象的好。
19:09
报名我们粘一下啊。哎,写到这儿,Public abstract返回了,那就是个double了,哎,CTRLV粘一下,诶就这么着,这个方法呢,既然是个抽象了,那我们就。哎,在这应该也是抽象一下。啊,没问题了,好,接着呢叫two string啊输出一下。哎,这个和birthday啊。啊,这块我们自己来写吧。哎,Public的哎。To string。他这块呢,只说呢,输出这样几个值,那咱就写一下啊,比如name。哎,加上一个name。加上一个number。哎,再加上一个。嗯。先逗号一下,我们这叫birthday啊。
20:01
哎,加上个birthday。这个birthday的时候呢,大家在写的时候一定要小心一点,我这样写呢,其实是不太对的。对,这时候呢,相当于是你是某一个类的嘛,这时候默认呢,相当于调它的to string了,它的to string的咱们也没重写过,相当于这时候就是地址值是吧。所以这个不是不合适吗?哎,咱们写的是不是叫这个名。对,所以建议这块你就显示的去调它了哈,这有一个小细节呢,注意一下。好,这块呢,我们就写完了,来回过来,整个呢就结束了。哎,接着啊,我们看这个需求。下面呢,去定义一个叫嗯,Salary的employee,让他去继承employee,按月计算工资,好,CTRLC。创建一个class,哎,叫他。哎,具体的这个实现,我们把这个呢拿过来。CTRLC。哎,粘过来稍微有点长哈。
21:06
好这么着啊,首先呢,让他呢去继承于刚才我们说的这个叫employee了啊,那继承以后呢,由于employee里边呢,是有这个抽样方法的,所以这块呢,我们需要呢,去实现一下这个,咱们先把这个上面这个写写,然后实现啊。这里边呢,提到了这个属性,在获取类属性的基础之上呢,又多了一个private生命的一个属性。啊,真的就是你的这个月工资哈。OK,好,接着呢就要提供必要的构造器,呃,Alt加insert构造器,先整一个,呃,标付类的空参的,自己这块呢也空参的,哎。整个这样的啊。嗯,再来一个这个参数比较全的哈,掉负类的这个,然后自己这个呢,也给大家加上OK一下,负类呢有仨,然后你自己这一个哎。这样啊。好,接着呢,针对这个属性呢,还可以提供盖赛方法。行,这些都提供完以后呢,然后我们看一下下边这个啊说呢实现父类的抽象方法叫earnings返回呢,你这个月工资。
22:05
啊,那其实我们这个盖的方法好像也没啥用是吧。来这块我们直接呢,就al enter啊,然后呢实现一下,然后回车。这个位置我们就return一下,哎,叫monthly salary。哎,就他就可以了啊。没问题吧?那其实这个的话呢,跟我们的盖方法差不多是吧。所以这块呢,其实这个你不不行就别写了啊。好,接着说这个叫toth润方法,这个方法呢说叫输出员工的类型及员工的123这三个属性。哎,这块我们就去重写一下。Public to。哎,这么着啊,哎,在这里边呢,Return首先呢,希望你输出一下这个类型,那我们呢,就这样。啊,比如来个他,然后这块呢,来个中号是吧,然后在里边呢,你把相应的它这个属性呢,都给大家写上。哎,最后呢,来一个哎封就可以封闭一下就可以了啊,然后这里边儿再去写的话呢,你发现呢,我们在刚才的负类里边啊。
23:06
对,写过这样的一个操作了。正好呢,就是你这几个属性的值,所以呢,我就直接想在这呢去调一下了。对,这个呢,注意你要直接写to呢,就麻烦了啊。这个呢,因为跟你这个名一样了,成自己掉自己了,所以呢务必呢是修货点是吧。对的啊好,那这里边儿呢,就是我们刚才写的复利当中的这个信息。啊,好了,回过来这个呢,就写到这儿,哎,就完事了啊。这个呢,就是to string。诶,就行了。哎,这边希望我们这样去写啊,跟这个基本上是一致的啊好,这呢是其中的一个类,然后接着我们再看下边这个,那呢还可以呢,叫按小时去计费。Hourly employee是继承于啊,Employee。好,这个类的话呢,我们看它相关的这个信息啊。ATE。诶,粘过来。
24:04
好,我们来去完成一下,先按照这个顺序来按小时计费,包括啊private。这个哎,Double型的啊,这个是单位小时的工资啊。哎,单位销售工资,然后private,呃,这个多少小时,咱来一个印的行吧。是吧?这个呢,咱们列成叫比如说月,哎,工作的小时数吧。哎,这么着啊好,然后呢,提供必要的构造器。还是先整一个空餐的。哎,接着。呃,提供的代餐的,把负类的这三个啊,加上你自己的这里啊,我们都给它初始化一下。一共呢,这是五个属性啊嗯,这是构造器了,然后这两个属性呢,也可以呢,去提供对应的盖赛方法。好,然后呢,我们再去,呃,实现这个抽象方法啊,这个叫earnings啊,那这个呢,你可以呢,直接在这儿也行啊,Earnings是吧,这块呢,它就给我们提示了,直接你回车,哎,相当于这块呢,直接就是一个实现啊。
25:09
哎,这样呢,我们就直接呢,让我们这个单位小时的这个钱,你再乘以这个hour就可以了。哎,这就行啊,这就是一个月呢,挣多少钱,其实啊。嗯,这个呢就完事了,然后接下来的话呢,它也需要呢,去重写一下这个twoth string,哎跟我们刚才这个类呢有点像啊,所以不妨呢,我就直接呢抄一下了啊CTRLC诶粘过来。诶,我们在这里边儿呢,拿过来把这个类名呢换一下。哎,这样替换哎就完事了啊。诶,他这块提到了,也是输出这样的一个基本信息啊,没有提到呢,把它诶个性化的这个属性呢,给大家添加进来,没说没说我们就光输出这仨信息就行。好完事了啊,那接下来的话呢,这块其实就到这个测试这块了。哎,测试这块呢,说定义这样的一个类啊。那我们就按照这个要求呢去定义。
26:01
定义它啊好回过来啊,这块呢,我们CTRLC。啊,站到这个位置。哎,这样了啊。看这块是怎么做的啊说呢诶,定义这个类,创建employee变量的数组,并初始化该数组呢,存放各类雇员对象的引用。哎,相当于我们可以呢,数组里边呢,去造刚才这两个类的这个对象了,来利用循环的方式呢,去便利一下这个信息。诶然后呢,包括生日信息这个都打印出来哈,然后呢,诶再从键盘呢,获取一下本月的月份的值,呃,如果呢,是某一个员工的生日呢,给他加工资是吧,这样的情况。嗯,那其实这块我们要练的点呢,叫抽象哈,从这个意义上来讲呢,其实我们这个该练的事呢,基本上已经练完了哈。傅雷呢,抽象了。子类这块呢,把傅雷呢,继承过来的这个抽象方法呢,还给实现了。其实就完事了,剩下这个事儿呢,其实就跟我们原来讲的继承一样啊。或者呢,跟继承家多肽这样的场景了。
27:01
啊,你看啊,首先呢,我声明的是employee类型的啊,这个看清楚啊,咱们是这个练习力的啊,哎,Employee类型的数组啊叫EPS啊拗一下employee数组,这样咱们就短点吧,我就整两个长度哈。好,接下来的话呢,我们针对这个数组的元素呢,这不得进行赋值吗。只要一赋值呢,这不就是多肽吗?对吧。诶声明的是employee,实际呢,你的是子类对象啊,就多态了,好这呢CTRLP一下看下这个参数是啊这块我们就可以写具体的这个值了啊,比如说。啊,咱班的这个。嗯,哎,张小亮是吧。放一个是吧,然后呢,Number工号是1001生日。New,一个my date是吧?这上写一个。比如说199。应该是九几年的吧。992了。那是比较成熟的是吧,诶12月,比如21号。
28:04
哎,这样是吧。好,然后呢,逗号一下。嗯。我写的对吧,对的啊好,然后呢,这块还有这个参数啊,CTRL记一下。还有这个月工资啊,希望挣多少钱呢?比如来一个,嗯,来个18吧先。18万了。哎,先来个一万八是吧,这稍微有点长,咱们给他在这换下行吧。诶这呢就可以了啊啊这呢,我们就创建好了一个。嗯,好,咱们再来一个啊,EPS来个一是吧,诶逆用一个,这个呢叫按小时计费的hourly employee。啊,这个参数呢,CTRLP一下,哎,有这样的几个哈,这个我们传一下。看谁呀?侯少鹏吧,比如说。诶黄少鹏,然后呢,工号啊1002是吧,就是在很多公司里边这个工号呢,他就呃,从小到大这样去排的是吧。
29:04
这个很多时候呢,你一看这个工号呢,小的啊,这就是老员工啊,你得尊敬一下是吧。对,你像这个有的这种,呃,外包性质的公司呢,他有的这个员工特别多哈,这个有的可能达到几千几上万的这种,但是呢,在这种场景下,如果你看到人家有个员工,一看这个一两千以内的。这块你这呢都两三万了是吧,你见到人家得客气一点,虽然呢,可能也是个普通员工是吧。OK哈,但是有些公司呢,这个工号有什么特点呢?你比如说你入职了有工号,然后呢,你就离职了。你这个工号呢,肯定就没用了是吧,那时有一天你要又回来了呢。比如说还有这种情况吗?这种情况其实在大唐挺多的哈。对啊,在大厂挺多的,就是比如说你在这个大厂里边啊,已经达到P6了,怎么升也升不上去了,然后这个时候呢,就被另外的其他的家,其他的这个大厂给挖走了,是吧,挖走以后呢,然后呢,你干着干着不想干了,你可能又创业了,创业以后呢,诶这个事儿做的挺好。
30:04
然后呢,比如阿里一看,说你回来吧。就给你挖回来了是吧,挖回来以后呢,可能这个级别就升了。很多时候呢,都通过这样的方式呢,把这个级别就给升上去了啊呃,相应的这个工号的话呢,不同的公司处理方式就不一样了啊,你像百度的这个处理。啊,因为呢,我咱们是呃17年18年那会儿开开也开过Python课哈,那会跟百度还合作,我还去百度他们那个中关村那块跟他们谈合作来着哈,然后呢,吃饭的时候就在他们食堂吃饭,那时候呢,他们已经用上人脸识别了哈。就在食堂,食堂的时候呢,就是呃,谁想点什么菜,你就直接刷脸就行。啊,就挺方便的了哈,然后我就看到他们那个工号呢,有的上面写着个杠一杠二是吧,诶我说这个什么意思呢,他说这个就是出去了又回来了。杠一是吧。就是一次是吧,啊,我说这个最大的多少,然后他说他我我见过的最大的就是杠四,我这也确实可以了是吧,诶大赏这种包容度还是挺好的是吧,嗯。
31:04
好,这个呢,就是不同的公司不一样啊。这个百度的话呢,当然在这个中关村其实占了好几栋大楼,旁边呢是联想是吧?呃,然后百度的话呢,他们这个楼跟楼之间呢,他们其实都连接的啊,据说楼上说是有跑道哈。呃,然后呢,就是基本上你只要上班的话呢,你这就是一个生活区一样,呃,你这个呃工作,然后呢,比如说你这个这个剪头发。是吧,呃,健身啊,就是整个一系列的都都可以在这儿。啊,有什么。警察局,警察局不在这个百度这儿园区附近呢,是有的啊,对对,相当于呢,就是他在中关村这块,百度还是算挺大的一家公司的啊。但是现在的话呢,感觉说这个有点掉队的意思是吧。OK啊行,这个咱们再拉回来啊,这个呢是一个工号,然后后边呢是一个啊MY。My date啊。这个生日。
32:02
不能那么大吧?啊,八几年的。来个九七吧。啊,然后来一个这个,比如说呃,一月的。啊,12号是吧。然后后边这块呢,我们还有这个叫呃的工作的小时数啊,这个大家算算一个月我们能工作多少小时。这看咋算了是吧,前两天那个马斯克。马斯克把这个推特给收了,收了以后呢,又瞎整是吧?然后那个好多人就离职了啊,他这块提到一个说每周呢,要求呢,他们得回来公司。工作40个小时是吧,其实呢,一想想还不过分啊,就是五天一天八个小时嘛。对吧。这个推有好多员工,他说在家办公的。啊,这个长期在家办公,然后呢,这个马斯克说不行是吧,你得来来这儿办公,行,那一说我们干脆离职吧,啊,这真是很自由啊。好,那你要是一周呢,按40个小时的话呢,这个呃,乘以个四,这是一百六是吧。
33:04
咱们要是按996算的话呢。早九点到晚九点,这是12小时,中间呢,抠去。扣俩小时吧,呃,算大家这个休息的时间是吧,呃,十个小时,呃一周呢是六天,然后呢,咱就按四来算,二百四是吧。还是多一些的哈,相当于多了50%吧。啊,50%哈。行,哎,其实呢,相对来说这个你去日本也好,去美国也好,其实这个成员的薪资待遇呢,还是比咱们国内的要高一些的。包括呢,现在这个尤其像日本,当然这咱们不是说鼓励大家就去这个日本了,当然去日本也行,攻占日本是吧,多去点也行啊这个。呃,日本现在也是急需这个。这个这叫什么,年轻的这种,嗯,这个咱叫劳动力了是吧,还有一个呢,就是新加坡。啊,新加坡现在也非常的鼓励,喜欢优秀的成员呢,过去待遇呢也很高啊,每每个月的工作时间也没那么长,大家如果你英语呢,各方面都还不错啊,如果呢,也不想在国内发展,可以考虑出去。
34:10
啊,先在国内先把技术先做一做啊,然后你再出去,要不别出去丢人现眼了,坏了是吧?啊再一个你过去之后,你技术好,待遇也会挺高的啊。加上中国人这个拼劲儿,过去可能也差不了。嗯,行,嗯,这块的话呢,我们这是240个小时是吧,假设呢就996了啊。那240个小时。呃,一个月呢,要是按2万块钱算的话,一个小时是多少钱?一个小时先按50算,这多少钱?这是一万二是吧。一万二啊,那就100,比如说两万四了是吧。行,这一看胡少红这个身体就比较好是吧?啊,两万四啊。诶,一提到这个按小时计费的,大家通常会想到什么呢?
35:03
或者说大家希不希望以后说,你说你你以后挣多少钱,你说我是按小时计费的,你觉得是高大上呢,还是说感觉。啊,高大上的对。对,你说我是按小时计费的,我是那个保洁的是吧,保洁也按小时计费啊。对,当然呢,在做技术岗的话呢,你说你让人小吃计费的,那就是很了不得的了。对,都是很高级的了,是吧。对啊,你像以前的这个,呃,咱们国内的这个Oracle d I这个以前上上个世纪90代,你用人家国外的这个数据库啊,像银行呀,证券都得用啊,用了以后呢,你维护的话怎么办呢?你还得聘请人家从国外过来,因为呢,他得要求呢,得有相关的一些认证哈,或者的话呢,对于呃银行证券来讲,你也不能随便找个人就开始跟你去迁移数据库或者调优,那你一调告诉你说不好意思。最近两天的数据没了是吧,那能砍死你了就是吧。
36:03
啊,所以说这块你从国外呢,把人家请过来,那就是按小吃计费的啊,而且呢,你这个吃喝住是吧,这都得是。那给人家都得包的哈才行,现在的话呢,肯定是不像原来了哈,相应的一些认证的人,国内现在也都很多了。但是呢,相应的你说按小时计费,也有一些很高级的岗位,那其中呢,像比较传统的就是DBA是吧。啊,数据库管理员啊,一说叫管理员感觉很low,大家一看软件工程师啊,市级的是吧?啊其实D的话呢,一个优秀的D呢,薪资待遇也不低啊,也得几十万了啊,你要是这个还是一个经验丰富的一个。啊,数据库开发人员是吧,诶你要去给这个银行去调优了,那必须得按小时收费,哎,收费金额其实也很高。OK啊,那相应的呢,其实包括大家做一些以后,你做技术以后呢,也会做一些分享啊,像一些企业当中呢,可能也需要呢,你去帮他们去做一些课程啊,几天的一个集训,这都有啊这种课程的话呢,其实费用呢也不低。
37:01
啊,这个原来还有也有找过我的啊,就是讲过那个GM那个课之后呢,是那个。叫神威呀,还是哪儿的?就是那个国家超算中心,他们需要呢,去做那个培训,然后那也是一天得。是2万还是几万呀,大概讲几千这种是吧。这个大家以后也也是很正常的这种情况啊,当然呢,我那次后来时间没对上没去哈。就是相应的你会有,比如说有一些课程呢,呃,这个企业里边需要了几天时间,基本上一天呢差不多,最保底的也得五六千起了,差不多哈。诶,所以大家以后的话呢,你再好好做技术是吧,做技术之余的话呢,如果口才也挺好,也比较爱钻一些技术,你也可以呢,去做一些分享,包括呢,以后大家也可以呢,诶来商务做一些分享。也可以是有偿的都是吧,嗯,你要无偿的也行是吧,OK啊。好,那么这样的话呢,我们就造了两个对象了。哎,下边我们要做的事呢,就是写一个for循环啊,是for挨一下啊,这个呢,我们就把这个数组呢做一个遍历。
38:03
便利的话呢,其实就把它这个信息呢,我们给它打印一下就可以了啊,诶首先这里边我们调这个I啊,它一个呢叫to string啊。这个呢,就相当于是打印它的一个基本信息。那就这样啊,他这块看咋提的啊。说来便利数组输出各个对象的类型啊,这个信息啊,这个birthday,其实就是这个生日了啊,这就写多余了。啊,这个呢,其实就是我们这个初始人方法里边写的这个信息了,嗯,那也可以呢,我们再接着呢去调用一下,说你这个工资是多少是吧。哎,工资为。哎,冒号一下啊,哎在连接上啊esi,哎第二啊,这个我们叫earnings啊。好,这个呢,就是基本的一个情况了,我们先做一个run啊。好,这不就出来了吗?说这个呃小亮是吧,这是他的一个投资人方法,工资呢18000,诶这个邵鹏啊24000,哎这个呢就都出来了啊好,那么下边还有一个需求说呢,从键盘呢,输入当前的暂,如果是某个员工的生日的话呢,给大加工资,这个就是一个小的需求了啊。
39:07
嗯,加到哪呢?写到前面吧,比如说上面呢,先来一个scanner。哎,Scanner哎,现在呢,大家你看写这个scanner的时候呢,这里边儿这个东西啊,就都很熟悉啊,这就构造器嘛。那造个对象是吧,前面来个import。啊,这都有啊好,然后呢,这个SC呢,我们在下边去调一下啊,比如呢,在这个循环之前,这个位置我们写一下啊说请输入当前的月份。这块我们通过这个SC点调这个next in的方法。哎,得到具体的一个mass。哎,就它啊好,然后这个mass得到以后呢,在这个循环里边呢,我们可以做一个判断啊,说如果这个month呢,等等于。哎,某一个员工。点get一个get一个。对吧,获取你对应的这个月份啊,说如果呢,你出生的这个月份跟当年的月份呢,是相等的,这个呢,我们就说一下啊,生日快乐是吧。
40:07
嗯,说呢,诶对,加薪100是吧。嗯,加100行这块的话呢,我们就不把它的加到实打实的这个工资里了哈,我就这块儿简单显示一下就得了。OK,嗯,这个一月份呢,咱们把这个改一改,改成11月吧,是吧。好,我们这块呢,做一个run。哎,这样啊,输入当前的月份啊,11暂。好,那这块呢,正好,哎赶上这个生日了,这块就加了100块钱。诶就这样啊,所以这块的话还是我们从键盘来输入的啊,那这样来讲的话呢,直接呢,你获取说当前是几月份也是可以的,后边我们讲到这个肠内。对,在这块啊,我们不是讲这个叫长类嘛,在长类这块呢,我们会讲的这个日期类型的,比如说这个calendar,诶直接呢,我们就能获取当前的月份了,哎,到时候呢,我们再说啊。好,暂且的话,我们就先用一下这个scanner啊,最后呢,稍微的记一点,把这个scan close一下啊。
41:02
啊,要不这块有个泄漏问题啊。好,那这呢,就我们这道题目就完事了啊,那整个呢,我们关于这个抽象啊,其实也就告一段落了,呃,整体来看的话呢,其实。不是特别难哈,只要大家把之前呢,我们讲的继承性,哎,多态性这个呢整明白了,那其实这块呢,这个抽象呢,只是在现有的基础上,把副类呢相样的方法抽象化,负类呢也抽象化就完事了。以后呢,我们在开发当中会见到相关的一些抽象类。只要看到抽象类的第一反应。这哥们儿呢,可能有抽象方法。只能叫可能是吧。因为抽象力里边不一定有抽象方法。但一般都有啊呃,另外一个点呢,就是说诶,我们要想用的话呢,一定得找它的子类了,因为它不能够实例化。哎,就可以了啊。
我来说两句