00:01
好了,同学们,那接下来我们开始上课啊,我们先来看一看这个昨天的内容。我们先简单回顾一下啊,简单跑一跑。来。第21天的课堂笔记,那么这块的话,咱们最主要是讲解了这个抽象类接口,还有抽象类接口的一个这个这个这个区别啊,另外呢,我们还说了一下类和类之间的一个关系啊,然后再往下呢,就说了一下我们的package和import是吧?啊,这是我们这个昨天的一个主要内容啊,我们简单的再回顾一下,呃,首先呢,抽象类这个基础语法这块呢,我就不再说了啊,因为这是前天讲的,然后下边呢,有一个接口的基础语法,你看第一个是接口是一种引用数据类型对不对?哎,引用数据类型。然后呢,接口是完全抽象的啊,完全抽象的。嗯。接口中啊,它这个呃,只支持什么呀,常量和抽方法是不是,哎常量抽样方法啊,然后接口怎么定义呢?哎这样去定义啊,Interface关键字。
01:02
它不是class关键字啊,是interface关键字啊呃,那接口呢,支持什么呀,这个多继承是不是,哎,它支持多继承。这个多继承实际上用的不是特别多啊,就这个接口和接口之间啊,它支持多继承这个用的不是特别多,但一个类实现多个接口,这个用的比较多一些。啊,接口中所有元素都是public修饰的public public abstract呢,可以省略方法的是不是?哎,常量的public sta final是可省略的,从接口当中的方法是不能方法体的啊,然后一个非抽象的类啊,实现接口的时候要必须将接口中所有的方法加以实现,这条是非常非常重要的啊,然后下边这条啊,就是一个类可以实现多个接口,这个用的比较多一些,至于说接口和接口之间,它这个多继承这种情况还是比较少一些啊,比较少一些,如果extend关键字和implement关键同时存在的话,EXTEND1定要是在前的啊,Implement啊医生在。
02:01
在后面的啊,在后面呢,嗯,那么另外的话,咱们要知道接口离不开多肽啊,它一般的和多态机制一起联合使用啊,因为接口没法扭对象,接口是纯抽象的。你没有办法,你对象那只能说我子类去创建对象对吧?哎,所以说这一定是跟多肽挂钩的啊,如果你前面多肽这块的话,呃,像这个负类型引用指向子类型对象这个代码没写的话,你这一块这个接口啊,可能会感觉有点陌生啊,感觉有点陌生。那么再往下就是接口在开发中的作用啊,我总结了这个三个字啊,这三个字呢,我不知道大家还记不记得,叫结耦合。别的呢,我就不再说了啊,结合。当然也可以提一提什么呢?咱们接口这块啊,它有一个什么呀,调用者和什么实现者是不是啊,我们的调用者呢,是面向什么接口去调用,然后实现者呢,去面向接口去干什么呀,编写实现,那这样的话,我们接口这块呢,调用者和实现者就达到了耦合度降低了,是不是,那么调用者呢,不需要关心你实现者是怎么实现的,或者说我实现者也不需要关心你调用者是怎么调用的,因为我们双方啊都是参考的这个,哎,接口接口。
03:06
那就像我造这个主板,就比如说我们这个厂厂家啊,造这个主板,造主板的时候,他不需要跑到那个生产内存条的那个那个那个那个厂家去问问,诶你们内内存条生产多大号的他不用。不用啊。呃,或者说生产内存条的这个厂家也不需要跑到那个生产主板的那个厂家说,诶你们主板生产多大的那个那卡槽是吧,他们根本就不需要沟通的啊,他们根本不需要沟通,为什么?因为内存条的它这个大小的这个卡槽的这个接口,他早就被一个计算机的这个协会,他早就制定好了,制定好了这套标准,制定好了这套协议,然后生产主板的人他和生产内存条的人他是分开的。他可以同时开开工,你比如说我我们这边是专门去负责什么呀,生产内存条对吧,你们那个厂家是专门负责生产什么,诶电脑的主板的,你们生产你们的,我生产我们的啊,那这个将来我们可以达到无缝对接,为什么我们可以达到无缝对接呢?就是因为哎我们都遵守一个什么呀,哎接口我们都遵守一个什么规范,遵守一个协议,而这种协议呢,是一个纯抽象的一种文字性的描述,你想想在在这个接口,在这个协议上是不是描述了啊,这个内存条的卡槽应该是什么时多大的是不是,如果是,呃,那个台式机的话应该是多大,如果是,呃,那个笔记本电脑的话应该是多大,这个都是提前规定好的。
04:22
啊,就像我们这个平时用的这个这个这个这个灯泡,对吧,灯泡和这个灯口之间的关系也是一样的,对吧?有的厂家可能负责生产灯口,有的厂家负责生产灯泡,对吧?各自生产各自的,最后的话,我们可以达到无缝对接,这个无缝对接是因为什么?是因为我们有接口,另外这个好处是什么?好处是我们将来其中有一个坏了啊,出现问题了,我们想扩展是不是很容易去扩展。对吧啊,你比如说我现在白炽灯想换成节能灯,对,你可以把白炽灯拧下来嘛,你去买一个节能灯,你拧到这个灯口上照样可以用啊,就是这样的,所以说接口呢,是一个抽象的东西啊,大家好好去品品一下这个东西啊,这个东西呢,其实。
05:03
没事,这个东西其实你现在要是品不明白的话,咱们慢慢的后期啊,你会做项目,在项目当中你再去慢慢品这个东西啊,那么紧接着再往下呢,说了接口之后啊,往下我简简单说了是接口,呃,这个类型和类型之间的一个关系啊,像这种什么is a呢,就属于什么呀,继承关系是不是has a呢,属于关联关系啊like a就属于实现关系,如果说你将来用is a呢,可以描述清楚的话。那么,呃。就表示说呀,啊,你可以设置成什么呢?这个继承的这种这种这种关系是不是,哎继承的关系啊,如果说呢,呃将来呢,这个呃,比如说我有一,我有一支笔是吧?哎,我有一支笔可以采用这种has a的这种方式描述清楚的话,那我们这个就可以,呃设置成什么呀,A里边有B的这种情况,那如果是LIKE2的话,那就是说啊,我们可能说A和B的关系,就是说A呢是实现什么呀,B啊就是这样的。好了,那么这块的话,咱们这个要了解一下啊,这个东西是涉及到这个设计方面的一个一个问题啊,设计方面的啊,比如说这个将来你在做软件设计的时候,诶,这个关系,我类和类的关系应该设置成这个继承呢啊还是说这个关联呢,对吧?啊还是说这个实现呢?啊对不对啊,那这块的话,咱们这个嗯。
06:22
呃,最好啊,能用这几个词呢,去描述一下啊,你看你呃使用哪个词能描述清楚,描述通,哎,你就给它设置成什么关系啊,一个是继承啊,一个是包含,你看包含是不是,哎然后呢,这个是什么呀?哎是实现啊是实现。好了,那么再往下呢,就简单提炼一下抽象的一个接口的一个区别,但在这里呢,最主要就是在语法上给大家提炼一下区别啊,提炼区别,至于说我们以后开发到底使用抽象类,还是说我们使用接口,这个可能还需要大家以后在做项目,在写代码,写功能的时候才能啊,才能这个思考到啊,才能思考到行吧,这个东西呢,咱们这个。
07:03
以后啊,咱们再呃再再再慢慢去品吧,啊还是那句话,那么到这儿呢,就是实际上相当于是我们抽象了一个接口就说完了,啊说完接口就说完了,那么再往下的话,其实就是package和import了,那么大家要知道package呢,它是干什么呢?它是这个,呃。定义包的对不对,那包呢,在Java语言当中有什么用啊。包在Java中有什么用啊,啊,就是我们可能会啊写很多类是不是啊,这些类的话,我们最好是分门别类对不对啊,我们这样的这个类,这些类呢,是负责这个功能的,那些类呢是负责那些功能的,我们最好给它啊分开目录进行管理,按照功能进行划分是不是,那我们分好这些目录,将来我们会更容易去管理我们这些类。更容易去管理这些类,所以说我们这个package呢,这块呢,还是呃。这个比较重要的一个东西啊,它呢只能出现在Java源文件的第一行,另外的话,大家要注意它的编译方式跟以前不一样了,让它的运行方式跟以前也不一样了。
08:07
来各位啊,我在此再强调一下,以后,以后说类名的时候。如果带着包名说就是完整类名,如果只说一个类名,那叫简类名,我在这补充一下啊,补充一下。补充一下啊,就是说以后啊说类名的时候。类名的时候啊,如果带着包名描述。啊表示什么呀,完整类名。那如果没有带包。对吧,没有带包。啊,描述的话。啊表示什么呀?表示简类名啊,表示简称的简啊简类名。明白吧,哎,减类名,那么其中的Java u呢,Scanner呢?这就属于什么呀?哎,完整类名。
09:02
啊,完整列名,然后呢加呃这个scanner。就属于什么呀,就属于碱类名啊,碱类名。但这个简类名实际上就相当于说你你比如说你跟你一个朋友啊,呃,你你跟他认识是不是你跟他认识,那你称呼的时候啊,你你你你不在,你比如说远婷啊,我认识远晴,我说远婷。是吧,哎,永婷,然后呢,大家都知道,呃。我在说这个是殷远婷是不是,哎,那么如果说我跟一个陌生人说,对吧,我跟一个陌生人说,我说那个远婷啊,怎么着怎么着的,那这个陌生人他不知道这个远婷是谁,对吧?哎,我说因远婷哎,他可能就知道了,所以说这个怎么说呢,这个。带着包,这个包呢,你也可以理解成我们现实生活当中的这个人的姓对吧?人的姓呢,你看像诸葛呀,欧阳啊,是不是,哎,所以说大家呢,昨天提的问题挺好的,如果你有一个包下有个叫test,还有个com包下也叫test,那这两个test不会冲突吗?哎,他不会啊,因为它类名不一样,这个类名叫org test,这个叫com test,它类名不一样,它怎么就冲突了,一个叫张三,一个叫李三,对吧,张三李三不一个姓。
10:14
是不是,所以这个完全可以区分开啊,完全可以区分开,好了解一下啊,了解一下。好了,那么这个呢,就是关于我们的一个package,那么在使用package的时候呢,我们有一些东西啊,为了开发方便,为了写代码方便,我们呢,可能需要怎么着啊,哎,需要学一个东西叫做什么,哎I import是不是哎import啊,那么import表示什么呢?表示导包啊导入,那么导入呢,这个import什么时候什么时候,这个不需要大家要知道啊,Java浪下它不需要。啊,加油浪不需要,然后呢,同胞下呢,它不需要。啊,还有其他的都都是需要的啊,要记住Java浪包呢,是我们JDK当中呢,这个最核心的一个语言包,这个包呢,由于它里边这个类啊用的太多太多了,所以这块的话,它就嗯,直接默认导入了啊默认导入了然后呢。
11:05
如果说你这个A类啊,去调用你B类的时候,你这个结果那个A和B呢,这两个类在同一个包下,你在同一个包下的话,那我就不需要导了,但如果除了这两种情况之外的,我们其他都是需要音泡的导入的啊,那么怎么用音泡的呢?音port的要么是完整类名。啊,要么是音泡的包名,然后点什么呀,哎星号对不对,哎,那昨天有同学就就问了啊,刚昨天我说昨天同学问的一个问题啊,他问这样问题说import呀什么的,Java u什么呢?啊这个scanner。哎,这个实际上就是什么?就是完整类名呗,对不对,哎,完整类名,那么import java.u to.scan呃,这个scanner变成了星号,那同学的疑问啊,就是同学的疑问,疑问是什么呢?哎,这样是不是效率比较低?
12:01
就是如果你写个星号的话,效率是不是比较低一些。那不是这样的,各位啊,如果你使用import Java u星的话,它编译器,它编译器啊,会自动把这个型号变成什么呀?啊变成你这个这个这个这个具体类名变成具体类名啊在运行的时候,实际上不是这样的啊,在运行的时候啊,实际上是这样的。啊,呃,同学的疑问就是这样,是不是效率比较低,我想答一下啊,这个效率不低。啊,就是这个效率啊,这个效率不低。因为编译器啊,在编译的时候,在编译的时候啊会自动。把星号变成什么,变成具体的类名,它能够检测呀,你因为你下面不是写了很多程序吗。是不是你这个程序里边到底用哪个类了,没用哪个类,他心里没数吗?对吧,你你这里你用了一个什么scanner对吧,那他就知道这里就应该是一个什么呀,哎,Scanner。
13:01
对吧,当然你也有可能用什么呀,Java u to下的别的类,就其他的类,其他的类也有可能对吧,那这个时候它在编译的时候,它就会变成,哎,Import的什么呀,Java u to什么呀,哎,Scanner明白吧,然后呢,它还会再来一个import Java u什么呀,哎,叫做其他类。明白吧,哎,它这个一行你在一行这个星号啊,它自动就会变成多行了,而且给你变成具体的了,我不知道这么说大家理解不理解啊,就是说你现在在程序里边出现了Java u求这个包下的所有的类啊,不是所有的三四个类,三四个啊,就三四个类你都出现了,那么这个时候将来在编译器编译的时候,它自动会把这行代码变成什么呢?变成这三四行代码。啊,什么Java点什么,哎,这个这个这个这个具体的类啊,所以你不用太担心这个啊,说它效率会不会啊没问题啊没问题,那么另外呢,还有有同学昨天就就就就有一个很好的想法啊,他说什么老师既然是这样的,那我能不能这样就音port加点星。
14:03
不就完事了吗?对吧,好,大家思考一下,这样行不行,就是连这个要求我也不写了,U求我也不写了。对,我直接八星,甚至有的老师我import的星不不不就不就不就完事了吗?星不就完事了吗?行不行啊。行不行啊。允许吗?加中。各位给个互动,允许吗?不允许啊,不允许各位啊,我在这儿呢,我说一下啊,这个星号只能是只能是到类名那级。注意啊,这个星号只能只能指定的是某个类的类名。明白吧,你不能省,为了省劲Java点星妥了是吧,或者是直接音炮的星就没有这种语法啊,没有这种语法,各位啊,没有这种语法。就你想省,想省懒劲,你不能太省,明白吧,就是想省懒劲儿。对吧,嗯。你不能什么呀,太省了。
15:03
啊,就import Java型。这是不允许的。啊,不允许的,因为在Java中,在这个Java语言中规定什么呀,规定这里的星只代表某个类的名字。或者是某些类的名字。明白吧,就星号只代表的是类名。就是简类名。它跟包没关系。啊,行了解一下啊,这是咱们这个昨天同学的一些问题啊,行了,那咱们花费将近20分钟时间简单回顾了一下啊。回到这。
我来说两句