00:00
好,那么这呢,我们是举了一个接口的一个题目啊,通过这个题目的话呢,大家去熟悉一下两个知识点啊,第一个的话呢,我们知道呢,这个接口这块也是存在多态性的,或者换句话说呢,当以后呢,我们凡是看到一个方法的行参是一个接口的时候,那这时候我说呀,必然要使用多肽。啊,因为呢,我们说接口本身呢,是没有构造器的,它也不能够造对象,那一定呢,得放它视线类的对象。啊,那这儿呢,就一定体现的就是多态性了,OK,以后呢,这种场景呢,其实建的是非常多的啊,前面呢,因为我们也提到了,说接口呢,它其实代表的是一种规范啊这呢,在我们对应的这个课件里边,大家拿谁去体会呢?诶,这个我们讲接口的时候呢,比如说以这个,诶GDBC是以它来去体会一下啊,这个接口是一套规范呢,就相当于这个散公司呢,定义了一套这个规范,这套规范里边呢,因为他没有说明具体我们要连哪一个数据库。所以说呢,这一套JDBC里边呢,它大量存在的其实都是接口,因为它没有办法去写这个具体方法的方法体了,因为写不明确,因为我也不知道你到底是哪个数据库了。
01:05
哎,但是呢,这套规范呢,我是可以定义好的,比如说我们连接数据库的时候呢,诶,我们要想连接这个连接呢,我就都叫做这个叫connection。啊,这就叫连接了,然后呢,这是一个接口,那么我们具体的这些数据库厂商呢,你去提供这个接口的实现类。好,然后呢,我这个connection要想获取连接,呃,我对应的那个方法呢,比如说就叫做get connection,然后参数呢,假设有俩啊,包括呢,我们这个添加一条记录的方法呢,假设我就定义成叫爱的方法了,具体怎么加我不知道。我这个方法,包括这个get connection这样方法,我都是抽象方法,诶那么你具体的数据库厂商根据呢,S公司提供的这样一套标准,这样的一套接口,呃,你提供同实验类的同时呢,就要把这些所谓的抽象方法呢去实现一下了。哎,我这个方法里边呢俩参数,那你这呢也得俩参数啊,诶这个ADD的方法呢,这个我叫ADD,你这呢就不能说啊,我这添加叫insert是吧,诶你这个呢叫ADD,你这个叫put那就不行了,我这全统一的叫A呀,比如说有仨参数这块你也得叫ADD方法仨参数。
02:11
哎,只需要呢,把我这个方法呢,做一个重写就可以了,哎,那么这个具体的数据库厂商。把GDBC里边这一套接口啊,都提供了,重启了这些实现类的集合,我们就称为呢叫对应的这个数据库的驱动。哎,驱动这个词呢,就是用在这里的,这个叫driver。啊,就是驱动的意思啊,你别别说是Oracle的司机了,是吧,驾驶员了,不合适了,这叫驱动啊,这个咱们前几天不也提到过这个事儿,就是说大家呢,这个USB接口其实也是一套接口啊,它呢也是提供了一套规范,然后呢,我们不同这个外部设备的话呢,去跟电脑去数据传输的时候呢,也要提供这个驱动。啊,这个呢,以前我们见到一些外部设备跟电脑一连接,都得需要去安装驱动,啊对应的这个图呢,这不就是这个图。啊,这个多少大家可能有点印象是吧,现在的话呢,我们常用的一些外部设备,比如说像鼠标啊,键盘啊,这个都是特别常用的,所以说这些驱动的话呢,在Windows系统上呢,后来就自动的就给安装了,所以呢,你插上鼠标键盘的时候呢,诶,它就不给你这个提示了,但是如果你这个外部设备呢,是一个不常见的一个外部设备,那这个呢,还是仍然需要进行的,那么这安装驱动的事儿,实际上呢,就是提供你这个外部设备,针对USB这套接口,相应的视线类这样的一个集合。
03:28
啊,这一套代码啊,就是这个驱动啊,这个大家再去体会一下啊,好,那么基于这个内容啊,这是我们说的,第一个是多态的这个场景,第二的话呢,就是我们这里提到了有四种不同的写法。在实际开发当中呢,当然第一种写法是最规范的啊,最标准的算是啊,但很多时候的话呢,我们可能都会去选择像三和四这样的这个写法了。哎,所以大家呢,下来呢,熟悉熟悉后边呢,我们讲到内部类的时候呢,再提一下这样的写法啊,为啥讲到内部类时候说呢?呃,因为我们这里边呢,其实呢,提供了一个这个USB的一个时现类了,只不过这个时间类呢,没有名,这个时间类呢,咱们放到这个方法里边了。
04:08
那其实呢,这个时间类呢,它就属于方法里边定义的一个类了,这其实就是内部类,哎,所以我们讲到后边类不类的时候呢,咱们再提一下这样的写法,再熟悉熟悉再写俩啊OK,那基于咱们这个apply呢,咱们接着看后课后的这个关于接口的练习题了,就首先我们看第一道题。OK啊好,这呢,上来就说声明一个接口叫。哎,包括抽象方法它,然后相应的这个具体的实现类了,OK啊,所以大家呢,你在看到这个接口的时候,你发现呢,诶我们前面呢提到过哈,说这个子类跟父类呢,体现的是子类is a父类。是吧,你可以说Chinese American或者Indian啊,印度人这个这些人的话,你说他是一类人类呢,可能是person是吧,但是呢,你像这个inter,他就是一种功能啊。对接口呢,就相当于它提供的是一种功能,一种规范是吧,比如说我们后边呢,会见到很多的接口啊,到时候大家的理解呢,会更深刻一些。
05:02
好,那我们就按照这个要求,首先啊,提供这样的一个接口啊。哎,叫好进来。哎,关于这个接口的一个说明,咱们就粘到这儿了,里边呢,就提供了一个抽象的叫word e的方法,诶其实我直接呢,就。这样写一下其实就可以了。哎,咱们说到过哈。哎呀,Class了,嗯,接口interface是,诶我们说过了啊,这个接口当中,诶我们如果提供的这个方法是抽象方法的话呢,诶这个前面都有这样的一个前缀了,所以呢这呢就给省略掉了啊注意啊,后边的话呢,我们再去讲JDK8的时候呢,它有默认方法和竞猜方法。哎,到那个时候呢,这个默认叫default,静态呢叫static是都不能省略的。啊,这呢,我既没有写static,也没写default,那这呢默认就是abstract,所以说这块呢,这个就是默认省略的结构啊。好,接着。接着我们接着看这个叫Chinese是吧,哎,这我们就一个个去提供这个实现类就可以了啊。
06:00
哎,这样就可以了,好回车一下,让他呢implement一下,这个叫it啊好这么着以后呢,然后你放在这out enter是吧,然后呢,再回车,呃,再回车,直接这块我们就可以呢,去写这个输出了啊。哎,中国人,呃,使用筷子来吃饭啊。好,接着呢,还有这个叫美国人。啊。RC。哎,这么着啊好。啊,这个呢叫啊,然后out回车啊,接着回车回车啊,一路回车就可以了啊好,那叫美国人使用。啊,刀叉是吧。才吃饭啊。好,这个比中国呢,稍微的差点意思是吧。啊,因为传统的话,这个刀叉呢,这个远古时代不都是这样用,当然在远古的话就印度了是吧。一下啊叫啊好al回车回车来回车啊。呃,印度人啊,使用比较天然是吧,使用手抓饭是吧。
07:02
好,这个呢,就我们写好这样的几个实现类了啊,接着的话呢,我们说测试类叫test啊。在这里边我们创建一个相应的数组。好,这个我们把这个需求呢,给大家粘过来。哎,CTRLC啊过来。所以呢,在这个词类里边呢,诶我们整一个没方法了啊,说创建一个叫E的一个数组啊,那我们就叫做E吧,诶new一个啊注意这块我new怎么写。我我我你有什么。啊,我写个三吧,这样写不。哎,注意啊,是这样写的啊,就是这块的话呢,诶这怎么又一个。又扭了个接口呢。哎,注意这块呢,就别这样理解了哈,这个呢,理解成什么呢?就我们拗的是一个数组,这个数组这块我们要指明的是它的元素的类型,这个类型呢是我并没有你后边这是构造器啊。哎,这个要注意一下,只是呢,指明我们这个元素的类型而已啊,诶这呢是接口类型呢,有三个元素,好,那么接下来的话呢,我们针对于这个数组当中的每一个元素呢,进行一个赋值,后边这个new,哎加的才是一个构造器了,比如我们先用一个Chinese啊以此类推,我们就哎创建三个不同的这个。
08:18
哎,实现类的这个对象了啊。是吧?哎,这就可以了,好,然后呢,接下来我们去便利这个数组,调用这个it这样一个方法,哎,这呢我们就创建好了,接着我们就for循环啊叫it是吧,然后这在这里边it.lengths啊。哎,这样。好,然后这里边呢,我们去调用每个元素,它的一个方法,哎,就这样一个思路就可以了。来,我们做一个run。嗯,好,这没问题啊,在这呢,就我们简单这样一道题目,那在这个题目当中呢,很显然这个位置呢,是不是体现的又是多态性啊。对的啊,就是我们只要呢生命接口了,这个大家其实也得有个意识,诶,我们给他去实例化的时候呢,一定是实现类的对象了,所以必然要体现多态性。
09:04
但反过来讲呢,如果要是没有多态性的话呢,这个你声明接口的一个类型的变量,其实就没有意义了。是吧,他自己又不能找对象,你又不能让他用时间类体现多态性,那不就没有用了吗?啊,那接口就没有办法体现这个这个所谓的我们这个叫规范了是吧,那要接口就没有意义了。而实际情况呢,我们在开发当中,大家会发现呢,这个接口是大量被使用的啊,所以说呢,只要有接口的地方就有多态性。啊,记住这个事儿啊。好,这呢是咱们的第一道问题啊,接着。啊,接着我们来看这个第二道题啊呃,这道题呢,呃,其实呢,能体现一点这个所谓的规范性的意思了,说说到这儿呢,我定义了一个接口叫做compare object。Compare呢叫比较的意思,Object呢叫对象是吧?呃,只要呢对象呢能够比较大小了,我们就可以让它去实现这样一个接口。你看这呢,其实是咱自定义的哈,那么以后呢,咱们讲到长类的时候呢,会提到说对象啊,我们在很多的需求情况下呢,也是有必要比较大小的,以前咱们说过啊,像大家这个打开手机,比如说你看新闻也好,你要买一个具体的东西也好,你发现呢,这里边儿的每一个位置呢,其实都可以看成是一个对象了,这些对象的话呢,它的排放,这个排列呢,就有顺序要求。
10:21
你是按价格排啊,按这个发布的顺序啊,距离远近啊,评分高低啊,啊首先呢,它是有序的,那这个有序的前提就是它能够比较大小。那这对象比较大小呢,后边我们会讲专门的接口来做这个事儿,呃,这呢只是说咱们自定义的一个接口啊,让他呢来体现一下表现对象大小的这样一个规范啊。好,他是这样说的,那呢,你定义这样个接口,这个接口里边呢,有个出方方法,这个方法呢有个反回值,呃,如果返回值是零,表示呢就是两个对象相等,如果是正数呢,就是调用这个方法的这个对象就大,哎,如果要是负数呢,表示呢就是你行参的这个对象大。啊,就是这个意思。
11:00
啊,其实这个接口呢,都已经给我们都写好了都啊,我们就CTRLC一下直接呢,我们哎声明哎,这是个接口啊,诶写到这儿啊。好,回过来啊,关于这个接口的抽样方法啊,都已经完全写好了。哎,注意一下啊,再复习一个内容,咱们前面呢,我提到过,说这个接口里边呢,这个方法是一个抽象方法,哎,这个public呢也能省,我这呢没有写abstract,其实也给省了。哎,所以你看这也没有方法体啊。呃,然后什么意思啊,就是抽象方法。啊,前面我说过啊,虽然它没有方法体,但是这个方法是做什么作用的,行参是什么意思,返回去类型是什么意思,都完全确定了。哎,这个大家一定要注意啊,只不过呢,就是怎么做这个事儿,这个细节啊没有定啊,需要呢,它的实现类呢去做。啊,回到我们这个位置也同样的道理,以后呢,我们在学习GDBC的时候也是一样,里边好多接口,然后接口里边有一些抽换方法,所以这个方法呢,参数什么意思啊,反面类型什么意思啊,都是确定的啊,哎,只不过呢,就是怎么去做,不同的数据库厂商不一样,你再去写具体的实现类啊OK。
12:10
好,这是第一个啊接口第二个定一个普通的这个圆啊,声明一个reads,然后盖采方法。哎,这呢,我们去创建一个类啊,叫做circle,哎,就它了啊好,首先哎,Private double readers,这个咱都很熟了啊,这叫半径。好,接着我们这个alt加insert啊,提供相关的,比如说先盖塞方法啊,整一个啊,诶来过到器。哎,隔道器呢,我们转一个,比如说空餐的啊,这一个啊。再来一个代餐的。诶OK一下,诶可以了啊好这个呢,Toth string toth string,他这也没明确说啊,Toth string咱就比如说就不写了啊,经常的话呢,我们针对于这种一个扎宾了啊,写个突资人方法,这也是常有的事儿啊,就这块加不加都可以啊。好,这个OK一下。好,那这个类呢,我们就涉及到这儿了,注意这个类的对象啊,天然是不能够比较大小的。
13:07
啊,我们造俩色购对象,你说谁大谁小不知道啊,也没有标准啊。哎,那要想比较大小,这呢我们就声明了,它的一个算是也叫子类了啊,这呢,我叫comparable circle,就是可以比较的circle啊,看这名字就比较清楚。哎,这么着啊,然后这个类呢,首先它去继承于这个circle,说明了,说白了就是你也是个圆啊,然后接着我再去实现一下,刚才我们写的这样一个叫comparable object。哎,一旦呢,实现了一个接口,你就遵循它的规范了,这呢是表示可以比较大小的,那你这个类的对象呢,就能够比较大小了。哎,怎么比较大小呢,这里边儿其实就涉及到这个规范的事儿,我们把这个接口中的这个抽样方法呢,给它写一下。诶,这就可以了,就是这样的一个思路啊呃,那么接着来看哈,这个子类的话呢,进成这个复类了,复类里边有个半径,所以呢,它也有盖塞方法,也有构造器呢,其实它自己也有调塑泊空,这都没问题,诶咱们在这个之外呢,也可以再去提供一个哈,比如说构造器这块,首先呢,我们把明确这个空参这个呢写出来啊,调负类的也是空参的。
14:12
对整个这样的是吧,我们再来一个啊,构造器要负类的,这个有半径的啊,他自己也没属性啊,就直接这样了。哎,这呢是构造器的事儿了啊方呃,这个盖塞方法和这个半径呢,就直接拿过来用就行了,然后的话呢,我们重点呢,实际上呢,是要实现这个处方方法的。哎,就是这个类的对象啊,就能够比较大小了,因为你实现这个接口了。这就体现了一种规范啊,好,那你怎么比较大小呢,这个方法呢,就是给这样标准的。啊,怎么给呢,这呢,我们就可以写一下啊说哎,根据啊对象的半径的大小。啊,然后呢,比较。这个对象的这个大小,或者说呢,这个对象的大小呢,是通过半径的大小呢来体现的啊好,那我们这块就可以做这个事儿了,这个写法的话呢,跟咱们以前讲的那个ES啊稍微的有点像。
15:07
啊E咱们当中是判断两个对象呢是不是相等,比如说你半径相等,我就认为相等,这呢咱们其实不是要复活false了,我要的是谁大谁小了,哎,区别呢是在这啊。所以这块的话呢,我们可以呢,也跟equals类似哈,上来呢,先看一下你当前这个对象和欧呢,你是不是同一个。啊,你们的地址是不是一样,指向的是不是同个对象,如果是的话呢,直接就return。领呗。你俩地址都一样,那半径肯定也一样了是吧?诶这是它啊好,那否则的话呢,我先看一下你的O啊,是否是一个,是不是comparable,哎,Comparable circle是吧。哎,你是不是一个这个当前这个类的对象啊,那如果要是的话呢,先给你强转一下呗。哎,把这个O呢,我们先给它转过来,转过来以后好调列方法的是ZZ呢是一个这个类的对象,行参呢也是一个这个类的对象,就看咱俩半径谁大谁小了。
16:04
啊,这个半径我们是用的double类型的是吧。Double类型的,哎,注意啊,所以这块我们怎么比呢?如果你要是这样写啊,说当前对象的get radius减去。啊c.get一个readus是半径,两个相减,说减的正的那就是当前的大,负的就是。当前的小直接做这个return,当然这时候你注意一点,这个return的时候,诶这是double类型的是吧,返回的是int类型,诶同学呢,就out enter,根据这个提示呢,直接做一个强转了,说不报错了。这个呢行不行。对,这个稍微差点意思是吧,对有一就是大部分情况没问题啊,但是如果呢,你比如这个半径呢,是2.5,这个呢是2.1是吧。这一减的成0.4了。对,这个你呢就成零了是吧,就成了它俩相等了哈,所以呢,就是当这个整数部分都一样的时候呢,这个事儿就不太靠谱了啊,所以这样写的话呢,其实不算对哈。
17:03
哎,这个我们说呢,哎,真的从这个逻辑上来讲呢,这是一个错误的啊。它不是语法上的错误,那应该怎么着写?要不咱自己判断得了是吧,说z.get readus大于c.get一个readus,这个时候呢,我们就return一个,只要你是个正数就行啊,所以我就RETURN1了。哎,你是一还是十啊,没区别啊c.getus如果小于c.get一个。啊瑞。哎,这个我们就是成一个负一。然后再来一个L。哎,这个我们就是成一个零是吧,哎,这个呢,是我们的正确的这个写法。这个正确的呢,我们说呢,这叫写法一。啊,这个呢,多少呢,写起来还有点儿费劲,咱们自己呢去写的啊,还有呢,比较简便的一种写法。哎,正确的这个写法二啊,这个写法呢,就比较省事了啊,大家呢,可以稍微记一下在这个。API里边呢,有个类呢,就叫做double。
18:01
这个呢,其实就是我们在这个位置啊,要讲的这个包装类啊,我们提前先用一下啊,这个double的话呢,你看跟我们那个基本数据类型那个double很像啊,它俩呢,确实是存在一定的关系,到时候我们再说啊,这个类里边它有个方法就叫做compare啊第一个。这compare里边呢,传上两个double型的值,那不就是我们这点get一下这个readus和我们这个c.get readus吗?哎,它呢,自动的就会给我们比较它俩的大小,返回的呢,就是一个in特性的值,我们直接呢,在这个时候return一下就可以了。哎,这样就行啊,然后这个方法里边呢,其实核心的代码呢,还是直接比较它俩的这个大小的。啊,这个注意啊,所以呢,我们只是呢,做了一个封装的操作。好了,这个前提呢,是你试当前这个类的实例的时候呢,是这样子的,那else的话呢,意味着是不是你就不是了。那怎么办?不是这个实力呢,相当于他俩根本就没法比是吧。没法比的话呢,这时候你看还必须要求我们有个返回值啊,或者你我这块不写else了,那也不行,这块你看天然还报错。
19:07
因为呢,呃,这种情况你给返回质量这种情况呢,也给了,那万一要不是这种情况呢,你没给。啊,所以呢,呃,其实相当于是一定得有一个这个else的这个结构了哈,但这块你return谁啊都不太合适啊。你写正的,那就算当前大了,写零啊一样大,负的呢,当前小正的负的零呢都给占了是吧。暂且呢,咱们没有任何办法,只能是随便先来一个数了。哎,那么后面的话呢,咱们会讲一场。下一章是吧,异常讲异常的时候呢,我们到时候就可以不这样去写了,怎么办呢?我这时候就给你抛一个异常。诶期间咱们可以先感受一下啊,在这个异常里边呢,我这写个信息说呢,你输入的类型呢不匹配。诶,也就是说呢,我这个参数这块呢,其实需要是一个comparable circle,结果你传了一个,比如说。是吧,跟我当年这对象呢,根本就没法比,诶我们就可以抛一个异常呢,但是暂且呢,咱们不是还没讲嘛,所以我们可以呢,先简单的去用它来顶一下先是吧,现在于这个情况呢,就是诶,如果输入的类型。
20:11
不匹配。啊,则返回二是吧,把这个事儿呢,明确的我们说一下啊,返回是二。好,那么这样的话呢,咱们就把这个方法呢,就写好了。哎,大家去体会一下这个所谓的这种规范的意思啊,只要呢,你实现这个接口。这个接口呢,就是来定义呃,对象能够比较大小这个事儿了啊,只要你生请接口,那你就需要呢,重写这个方法,只要你重写方法诶,那我就有办法能知道这个到底谁大谁小啊,因为这块你返回这个值了。OK啊。那这个事儿呢,其实我们就做完了啊,下边就是具体的这个测试的事了啊,CTRLC一下。哎,这让我们粘过来啊。好在这里边所呢,创建两个叫comparable circle的对象调用这个方法呢比较大小,哎这个就是比较简单了啊,诶may方法一进来,这个呢,我们去啊comparable的circle是吧,诶叫C1啊,你一个comparable circle,这个呢,你写一个比如2.3啊,再复制一份,我们再来一个C2。
21:11
这个比如来一个五点啊5.3这样就可以了啊,然后通过这个C1呢,我们就调这个叫compare处理方法,把C2呢就放进去了。那就这样是吧,然后这时候呢,他就得到一个值嘛。那这个值的话呢,根据大小我们来判断哈,首先比如说int类型的叫compare value。哎,比如得到这个结果啊,我们判断说如果啊,Compare value它是大于零的。啊,这个我们就说呢,这个AC1。哎,这个对象大是吧。Else if啊,Compare这个value呢,是小于零。对,这个叫acr这个对象啊。哎,这样啊,然后再来一个else。哎,这个C1和C2一样大是吧。嗯,一样的。
22:00
诶,OK啊行,像这种一样大的话呢,有同学可能会说,诶,那我们在这块排序的时候呢,这是一个对象,这个对象就比如咱们看这个美团外卖呀哈,说这俩一样大了,那怎么办啊,那到底谁先前谁在后边,总不能俩并列着放吧。对,你可以再指定一个参数是吧,比如这两个的话呢,这个我们说叫评分吧,这个评分呢,一样大了,你按评分排列序哈,那评分一样大了,我再比一个,比如距离远近。啊,距离你总不是一样,你说距离俩挨着呢,啊你这一样,那我再来一个这个点的这个销量。是吧,哎,总可以呢,把这个标准呢,我们再细化一下,哎,最终呢,就只要找到一个不一样的标准,那就可以。如果你还一样,大不了你来个时间吧,谁上线时间早谁就有钱,你总不至于说到秒那块也一样吧。是吧,那不一不一定了啊,所以总可以找到一个不一样的标准啊。好,这呢,就我们当前这道题这块又提到说参照上面这个写法呢,我们再创建一个句型的这样一个类,然后呢,让他去实现我们这个,呃,这个句型类这个不能比较大小了,它的这个子类呢,叫comparable这个retangle句型,然后让它呢再实现一下我们当前这个接口表达了就是这个类的对象呢,就可以比较大小了,因为呢,它实现这个接口的时候呢,也会去重写这个方法。
23:11
哎,这个呢,我就不写了啊,大家下来体会一下就行。通过这道题目呢,大家去体现一下,体会一下这个接口这种规范的意思啊,后边呢,咱们这个接口呢,就不自己提供了,专门有两个接口,一个呢叫comparable,一个呢叫compar,专门来去比较对象大小的。啊,到时候我们再说啊。好,接着来看这个第三道题,这道题目呢,相对来说呢,就大一些啊,这个练习三的话呢,它是这样子的啊,我们先来看一下这张图。啊,还有一个这个图是吧,这里边儿呢,涉及到了一个是叫develop,就是开发的成员了啊,然后它呢,有相关的属性和一些方法,其中呢有个方法呢,叫taking vehicle啊,就是呢,他上班的时候呢,需要有这个交通工具。啊,这块呢,就提到一个交通工具啊这样的一个结构了,好,然后这块我们就蹦到这个图上来看了,啊这个交通工具的话呢,它是一个抽象类。
24:07
哎,这个抽象类呢,它有相关的这种属性相关的方法构造器啊,抽象类有构造器啊,都说过了,里边呢有一个方法呢,是抽象的,就是这个run方法。就是这个交通工具呢,它怎么行驶呢,这个不确定,然后呢,我们提供它具体的子类啊,子类呢有这样几个,第一个呢自行车,第二呢,这个电动车啊,第三个呢是汽车。呃,这个燃油的这个汽车啊好,那这是三个它的子类啊,那就意味着继承的时候呢,如果这三个呢,想造对象,那必须要呢,要把这个方法呢,得给实现一下是吧。哎,这都实现了。啊,实验呢,同时的话呢,这块又提供了一个接口叫I power啊这个接口里边呢,有一个方法就是如何去提供动力,那这块呢,呃,这样的两个类呢,是实现了这个接口,那相应的话呢,也把这两个抽样方法呢,也给它实现了一下。啊,这呢,就是整个我们这样的一个逻辑关系啊好,那这儿呢,咱们就先来写一下这个叫呃程序员吧developer啊先来处理一下它啊。
25:07
OK,这呢,就是一个ul的一个类图了啊,我们直接再去写啊developer啊。还有他啊。好,这呢我们就根据这个题目的要求,首先来string类型的一个name啊,Int型的一个age啊,这呢咱们都相对来说都比较熟了。好,接着呢,针对这两个属性的概率方法。啊,这个直接生成啊,Alt加insert。点这儿啊,两个都选中OK。没问题啊,这呢没有说构造器的事儿啊,一般呢,咱们都习惯性的给大家得提供一下啊。不到期,因为你不写呢,它有咱们通常呢,都把它显示的给他盯一下啊,一般的两个啊是肯定有的,第一个呢就是空餐的,第二呢就是全餐的啊。哎,这两个。诶,空餐这块呢,主要体现来看就是个扎B的概念。目前那个develop是不是就是个闸啊?哎,公共的类。公共的午餐的构造器、私有的属性及get set方法。
26:04
没问题是吧。OK啊。好,那么这块呢,多了一个方法,就我们刚才说的啊,Public。嗯,这个叫taking是吧。Vehicle。嗯,这个大家呢,可能写代码的时候,一看到这种不太熟的这种单词呢,就比较胆怯一点是吧。其实谁都是啊。谁都是,嗯,我这个呢,我也提前刻意再查了查,还念了念,要不我也不太熟这个是吧,其实一般咱们很少用到啊。嗯,Vehicle啊,哎,这就完了啊。行,就是交通工具的意思啊,没啥特别的。好,那么这个类的话呢,还没有,所以这块给我们报错了也是很正常的事啊,嗯,先说一下,我们把这个先用了吧,在这里边干什么事呢。他这里边提到了啊,说呢,我们调离方法的时候呢,在此方法中调用交通工具的run方法啊,因为这个抽样类呢,有一个run方法了,咱提前就给大家前调一下吧。
27:02
啊,这块报错是很正常的啊好,那么关于这个类呢,我们就完事了。对,下边的重点呢,我们是来写这个类以及它的这个子类了啊,先看它。哎,新建一个类啊。啊vehicle啊,就他好这块你写完之后呢,这块这不就不报错了,这个呢还没有方法呢,所以这块还抱着啊。呃,首先呢,这块提到它是一个抽象类啊,那就abstract。呃,一提到收养类啊,不要去创建它的对象啊,不能实例化,这个就是直接反应啊。呃,有一个私有的死针形的啊,这个叫brown啊,这个大家不熟,叫品牌是吧。啊,就是什么牌子的啊。然后呢,质类型的一个color啊。对,这是颜色了。嗯,够大气。概算方法啊,这都轻车熟路啊。要去一个空仓的。嗯,两个参数的。
28:03
诶概塞方法诶好搞定啊好这块呢,提到有一个抽样方法叫做run。这呢是抽象类了啊,抽象类这块你别一上来就这个word run了,那就这么着一下,这就报错了。为什么?对,抽象类里边的这个没说,这个是抽样方法是吧,所以这个呢,你必须要显示的去把它加上啊public abstract这个你不加它真没有。啊,这样写上才行啊,结构里边呢才可以省啊,注意。好,那这个呢,就表示你如何呢去行驶,哎,完事了。接着呢,咱们再去提供啊,它的具体的这个所谓的子类啊,子类呢,有这好几个。哎,这个一个个来吧。啊,第一个啊,自行车啊。Bicycle啊,它首先继承于咱们的。Vehicle。这个啊啊,记录完以后呢,这块呢,就报错了,原因是啥呢。
29:05
对,抽样方法的事儿是吧,OK啊行,这块我们out回车一下,再回车再回车,直接把这个就拿过来了啊行,等会儿再写它,先看别的。嗯,这里边儿呢,没有提到额外的一些属性,那就不用写了,那构造器我们整一下吧。诶构造器啊,这块也提了,这个直接呢调负类的,比如我们这儿你要是也整个空餐的,你就先调这个啊点OK,这就是空餐的了。哎,如果呢,你要有这个带参的呢,你就选复利的这下边这个啊,诶自己呢,通过提供这两个属性啊,这两个行参,把复利中的两个属性呢,给初始化一下啊OK。嗯,然后呢,就是这个转方法了。那这我们写一下啊,说这个自行车啊,通过人力呢。人力脚蹬是吧。来行使。诶,这样就可以了啊。好,这是它的一个方法,接着过了下一个。这个哎哟,挺长的哈。电动。
30:00
是吧?Trick。Electric,然后vehicle。没写错啊。好。嗯,这个呢,我们让他呢,也是去继承于。啊,这个我们就叫vehicle是吧,这个electric呢,这不就电动的意思吗。所以你看有好多这个车呢,它都是E开头的是吧。这个我记得是是哪个品牌的,是奔驰还是啥的,有SS。S6S8啥啥的哈,然后那个咱们国内的那个,嗯,未来。未来呢,他不是叫ES出来个ES先出的是ES8是吧。后来呢,出来ES6,然后它有个EC6是吧。呃,大家可能不关注哈,就是未来这个车呢,他不是先出的这一款,后来出这一款了,然后呢,我那次看了个新闻,说这个在欧洲呢,他被告了。为什么被告呢,说呢侵权说他提前呢,把这个名字给占了,导致呢,是奔驰还是谁呢,导致他就没法用了。因为他们原来的燃油车呢,它叫S6S8,他呢现在也想出电车,他就想在前面加个E。
31:04
结果呢,说你这块给占用了。我说这也挺霸道的是吧?嗯。好,这个拉回来啊,哎,这儿呢报错呢,还是跟前面原因一样啊alt回车回车回车,哎,这就可以了啊。好,这里边呢,也没有额外的提供这个属性啊,跟这个上个类自行车这个设计呢,是完全一样的啊,Alt insert构造器。哎,先调一个空餐的。哎,第二一个这个代餐的这个。哎,这就可以了啊。嗯,这儿呢,它有一个run方法啊,这个run方法呢,这块我们首先写一下啊,这叫电动车啊,这个它的run是吧,嗯,通过这叫电机是吧。电机这个驱动啊。行驶。好,这是它啊,然后呢,写到这儿的时候呢,其实就提到了这有一个power,这个power呢,就实现接口的事儿了,这个咱们一会儿统一的去写吧。然后再接着我们去写它的另外一个子类啊啊。
32:04
让他呢,继承一叫vehicle啊。这也是同样问题,Al加回车回车回车。就这样啊。好,那么汽车这块的话呢,有一个死针形的叫car number啊。啊,这个private。哎,死顿类型的啊,Car number啊,诶这块呢,汽车的牌照的话呢,用的是字符串类型。里边不有那个abcd吗?啊。对,然后这块我们提供了一个构造器啊。最高期这块呢,我们也整一个空餐的吧。哎,然后复类这块呢,自己这块呢,就先不调了这样一个。然后再来一个带参的,哎,掉付里这俩自己这个呢也补上,那这有三个参数。嗯,好的,然后呢,针对这个属性的概算方法。啊,这个都比较熟啊,直接拿过来了。好,下边这个run方法。啊,这个呢叫汽车啊。通过这内燃内燃机吧。
33:01
驱动行驶啊,OK。好,这呢,就是我们写的这样的三个子类啊,子类列完了以后的话呢,针对这两个子类的话呢,它还实现了一个接口。啊,这是我们刚才看到这里边儿的这个。那这个接口的话呢,我们得提供一下了。哎,你看一下这个里边这个层次关系啊。这个类呢,实现接口这块,我们用的都是这种虚线。啊,这个子类呢,继承父类呢,都是这种实现。在这呢,我们叫哎哎power啊。这个呢,它是一个接口啊,你就选这个就行啊。好,这呢,我们就直接avoid呢叫power。诶,这呢,就是一个出样方法啊,没问题好,然后呢,让我们刚才呢,这样两个相应的子类啊,一个是电动车这块。去一下我们的I power啊。啊,对应的这块报错这个呢,呃,大家你在这块行啊叫CTRL加嗯,Alt加回车嘛。
34:00
这个刚才已经说过了哈,或者的话呢,还有一种方式就是嗯,CI。你说I啊,这个I呢,就是implements的意思。哎,你看这块也会提示出来啊,你点一下也行。啊,这个咱们给大家写到后边吧。这个就是动力的意思啊。这呢,是电动车啊。点。呃,电动车这个使用。电力啊,提供这个动力OK啊。这是它,然后呢,接着回到这个啊这块,然后在这个位置呢,一下我们这个I power这样啊好,你把光面呢,比如就直接放到这了,然后呢,CTRL挨一下是吧,这个呢直接也能调出来啊。就是这个好处是啥呢?就是如果呢,你这块实现了好多个接口,而且呢,接口里边出装方法呢也很多,假设这个类的话呢,你还不想把所有的出装方法都重写,这块你CTRL按一下的话呢,它会把它实现的每一个接口里边的出方方法都会列出来,哪个你不想写,你把它这个选中的就去掉就行。
35:04
啊,它就比较灵活一些啊。好,目前咱就这一个嘛,所以没得选啊。好,这个呢,我们写个输出,这叫汽车,哎,通过。啊,这个汽油是吧。哎,这个提供。这个动力啊,OK,好,这呢,就是我们说的这个相应的这个实现类啊,通过接口的角度呢,这就叫实现类了。写完事儿了。诶,那整个的这个呢,其实就算差不太多了,后边就是这个测试的事儿。说这个工程师啊,这阿里这个工程师,诶你造一个developer啊,具体的个对象了,他那有个这个方法,然后呢,调这里边这个run,为了出行方便呢,他买了一辆捷安特自行车,雅迪电动车,奔驰轿车,这还是比较有钱的是吧。啊诶,然后这块呢,诶这样这样这样相应的操作,然后呢,它有三辆交通工具嘛,所以呢,它有个数组去装这样的对象啊OK。来这块我们去创建一下啊。
36:01
啊,这个我们叫做。比如说叫vehicle吧。它的一个测试,教这个吧。好,没方法进来啊。好,那首先的话呢,我们先把这个工程师呢,先创建出来啊。Develop。哎,一个啊,Develop这样啊,好,然后这个develop的话,它有这个vehicle这样一个方法。啊,有这样一个方法,这呢就是它的这个交通工具了,那目前的话呢,还没有呢,是吧,诶我们接着呢去创建。哎,三个哎交通工具啊,然后呢,这个保存在哎数组中啊,那三个交通工具的话呢,保存在一个数组中,这一个数组的类型呢,只能是写它写成他们共同的类型,那就用这个福类了啊。啊,微热口类型的一个数组啊。哎,你有一个。这样一个数组啊,就来个三就行啊,这个呢跟我们前面说的这个接口一样,这呢是一个抽象类啊,这个抽象类的话呢,这块你别说诶怎么new这个抽象类呢,诶这个呢不是new啊,只是说声明这样三个元素的这样一个数组结构,每个元素呢是vehicle后边不是构造器啊。
37:12
然后依次呢,我们去副职小零,哎,先整一辆自行车是吧。这套啊。嗯,这里边儿呢,我们说可以去调这个代餐的哈,CTRLP一下就是俩参数嘛,品牌捷安特啊。啊,颜色呢,比如说这个。嗯,烧红色吧。啊。哎,其实这种自行车呢,我觉得你要整个名牌的,然后还还挺新的,挺不安全的是吧。对,容易丢啊。哎,再去扭一个电动的车是吧,这个呢,CTRLP一下啊,这个也有品牌是吧。亚迪是吧。大品牌是吧。嗯,这个比如说蓝色是吧。天蓝色。哎,这是一个啊。这个电动车的话呢,其实危险的就危险在。
38:03
偷电瓶,这是吧。嗯,我在北京的话呢,当时买过一个电动车,就被偷过,连着偷过两次,我就郁闷了哈,对,在这个咱这个公司楼下呢,就是放了晚上呢,这个这个给我讲了会儿课,然后呢一下去呢,怎么一开开不了呢,我以为没电了,一看没了啊啊电瓶没了啊,他车不偷,他不要车上就要电瓶啊。我那个电瓶还挺多的,1000块钱买的,转头呢买了,因为那个到年底了,就比较贵嘛,是吧,小偷可能回去也得过年了哈。嗯,刚偷完,刚换了一套新的,然后在我小区里边又被偷了一次。郁闷了,就然后我就换了摩托车了,就啊。嗯。然后呢,头油啊头油应该不至于吧,啊,你用个抗是吧。哎,CTRLP啊。这是奔驰啊。诶奔驰,诶color这个呢,来一个呃,黑色啊。
39:00
哎,这个来一个number是吧,这咱上海的话就是who。互互是吧。我把。上次我在那个好好早之前了,我最早来上海的时候,应该就是呃,一零年那会儿。来过,因为本来一开始要考研的时候呢,这不是想过来看看,那时候想考这个,一开始我想考上海交大,后来呢,我就换了,换成这个考复旦了啊,就后边考的其实复旦啊。对,当然呢,在这个外滩那建了一辆车叫沪AU888,我这个太牛了是吧。AU本来不就是金的意思吗?是吧,AU888啊,很帅啊。好这块的话呢,就是拗了一个具体的这个car啊OK啊,对,后来考研的事儿是调剂到这个北航的是吧。很遗憾是吧?因为我的概念当中,北航呀等等这种跟呃清华北大复旦,呃交大啊,还是稍微有点差距的是吧,嗯。
40:04
其实分低的就还行吧,主要是分其实挺高的,但是就是单科没过线啊,对啊,单科没过线,因为英语这块呢,就是作文也是时间安排的不好,到最后还剩呃十多分钟的时候,考官提示说还有15分钟吧左右哈,我一看这个作文,前面这个还没收尾呢,赶紧写,写完之后呢,还剩十分钟多一点,前面没涂卡,赶紧涂卡。涂完卡的时候呢,其实就十分钟不到了,这个时候呢,那个作文在写的时候,手已经抖的都不行了,都话,因为想想你花了半年多的时间去考研,然后现在突然作文还没写是吧?哇,那个你想不紧张都很困难的,所以作文的话呢,抖的一塌糊涂啊,手然后连一半都没写完。是吧,就那样,所以作文肯定分高不了了,很显然是吧,最后呢,这个复旦这块是可能需要55分哈。考48差这个七分是吧,然后但是总分很高啊,总分呢,呃,复旦他这也有这个就是你要分特别高呢,他也有这种五分填一分的这个情况,就这种情况下,我填完了以后呢,距离他这个复制线呢还高一些。
41:04
啊,但是这个呢,我跟他们系主任说,系主任说说你这个分是挺高,但是呢,五分以内可以破格,你超过五分了,这个不行了,所以就遗憾去北航了,就说啊行命运是吧。嗯,但是呢,大家看现在找工作呢,就截然不同了哈,就是你说这个去面试的话呢,这家没成没成,转头下午就下一家了是吧。诶,所以大家现在在这学技术的话,跟你考研是截然不同的啊,考研的话你付出了大半年的努力,最后呢,真的有极大的概率打水漂,尤其呢,你要考一个名校的好专业的话,更是如此啊。诶,那所以找工作这个事儿呢,你现在的每一天的付出啊,其实呢,都是你今天付出了这个学到两点了是吧,你想哎呀,今天又加了100块钱是吧。对,都是能看得到的啊。好,这块我们再拉回来,这呢我有三个交通工具啊,然后的话呢,我们诶可以就写一个,比如说for循环啊,一个I呢等于零,I呢小于啊叫vehicle点啊length。
42:02
OK啊,然后I呢加加一下。诶这就可以了啊好,进来以后的话呢,针对这个呃成员来讲,诶他呢就可以诶去调这个叫taking vehicle这样一个方法啊这个方案里边呢,我们就可以呢,去调它指定的哎角标I每一个交通工具了,然后这块调的时候呢,诶在这里边呢,就调用了我们这个vehicle这个交通工具的一个run方法。啊,首先从这来看呢,其实就是一个多肽了。本身呢,你看抽象类呢,也不能实例化啊,所以只能放实现此类对象多态啊,所以呢,我们编写的时候,或者叫编译的时候呢,我们这个run方法,我按住CTRL键一点,这必然呢是到vehicle这个里边了。哎,但是真正我们执行的时候呢,呃,那就是它具体这些子类啊,一个两个。三个是吧,哎,这个子类呢,重写的这个run方法。这个呢,就是仍然是我们满足多肽的虚方法调用啊。哎,这个熟悉一下。好,我们这块呢,来一个。OK啊,这个执行的话呢,我们就调各自的这个run方法啊。
43:02
讲这个题目当中呢,没有具体测试这个接口里边这个power这个方法是吧,是不是还提供了相应的一个动力吗。啊,这个呢,你再相应的呃,再判断也行哈,说如果呢,你要实现了这个接口了。呃,这个意思哈,这个题目没有要求了,但是如果你要想做的话呢,也行,什么意思啊,你看这个意思啊,就是额外拓展的一个功能,我这加个判断哈,说如果呢,我们这个叫vehicle I。我呢,来一个叫of,叫I power。就是在我们这个接口这块呢,仍然可以这样的去写。啊,注意说呢,如果你要是他的一个实力说这这算吗?算啊,你像这个汽车诶,还有我们这个电动的这个车是吧,他俩的话呢,判断的时候呢,也是负啊,但在这种情况下的话呢,我们就可以考虑你说我直接这块去调行不行,这显然不行。哎,我们这里边儿呢,这个叫power是吧。这时候你掉就不可以啊。你看我第二他直接给我提示了。因为呢,你这呢是一个哎vehicle它本身没有爬火方法调养调的话呢,一定得强转一下是吧,那自动的就给我加上了啊,Idea还是比较强大的。
44:09
诶,这个我就这样掉了,好来,我们再去做一个软。嗯,这就没问题啊,你自行车的话呢,没进去嘛,然后第二呢是电动车,电动车进去了,执行的是这个run方法,然后在这儿呢,一判断是个触,这就提供这个动力了,然第三个的话呢,是一个汽车,汽车呢这块调的run,然后在这呢就做了强转了,然后呢调的这个power。没问题啊。好,那么这道题呢,我们就告一段落了。哎,大家下来呢,把这道题呢,可以写一写,看着稍微的有点复杂啊,那么在实际开发当中,其实相互之间类的关系呢,你看似挺复杂的啊,还实现一些接口,其实大体上来讲呢,也就是这么个结构了。
我来说两句