00:00
今天的话呢,咱们把这个面向对象,这个像这里边剩下的三个内容呢,讲了分别呢,对应的叫abstract interface接口,还有最后呢叫内部类,这三个知识的话呢,从重要性上来讲,这个抽象类和抽象方法这个是比较重要的,接口也比较重要,这个呢就稍微其次了,它的这个内部类的这个使用频率呢,跟咱们的代码块呢,或者你都可以认为相较于我们前面讲的三个结构频率比较低,内部类的话呢,其实比这个代码块呢还低。实际上海底那这块呢,大家也是关注一下这个它是什么样情况,怎么用的,咱们自己开发中呢,用的其实比较少就可以了,好,那首先呢,咱们来看一下这个抽象类和抽象方法,这个抽象类和抽象方法呢,我们既可以归成咱们一开始讲的三条主线中的这个第二条,第二呢就三大特征了,只不过呢,有的时候你看这些书上说说有四大特征,那那个四大特征所谓的呢,加了一个就是这个抽象性,就是抽象性,就是你可以也把它放到这个第二条这个主线里边,或者说呢,你要不放你就放到第三条,第三条里边呢,就是关于关键字的使用,抽象呢叫abstract关键字,所以呢,我们也可以认为它是关于abstract关键字的一个使用,也可以,那后一个呢,叫做接口interface,这个我们也看成是第三条主线,就是关键字的使用,而这个呢,是第一条主线叫内部类,那这个呢,就整个面向对向三条主线呢,我们就补充完整了。
01:27
好,那下面呢,我们来谈一谈,这个叫抽象,你把它看成是一个关键字的使用,也可以看成是呢我们的一种思想也可以,那这种思想呢,那叫做抽象性,抽象性想体现的是一种什么样的思想,就像前面封装集成多肽一样,那首先呢,咱们来看这样的一段文字,这个文字呢,内容不多啊,这个我读一下,哎,我一边读大家一边思考,说呢,随着继承层次中一个个新子类的定义,你可以想象下边这样一个图景,这呢是父类,下边子类,我们呢,定义了很多的新的子类,那类呢,就变得越来越具体了。
02:06
这个叫官员,这个农民,那个呢叫工人,那个叫老师学生等等,这个此类呢越来越丰富,越来越具体,而父类呢则变得越来越一般,更通用。那么类的设计应该保证呢,父类和子类呢能够共享特征啊,因为你有技能性嘛,所以这个父类中的结构呢,子类就都拿到了,大家都共享你了,那有的时候呢,我们将一个副类啊,设计的非常的抽象。以至于呢,它没有具体的实例,这样的类呢,就叫做抽象类,这句话呢,是不是也比较抽象啊,我一看好像看不太明白,哎,是这个意思,就是咱们刚才提到了,说这是一个人,那么这是官员,这是农民。一开始的时候呢,我们在这个人里边呢,还是定义了一些功能的属性啊,方法都有,而且呢,咱们开发中呢,有时候也会去new一个person,但是后来呢,随着咱们创建的这个子类呢,越来越多,越来越丰富,越来越丰富,越来越丰富,然后他们在继承于父类的同时呢,还提供了自己方法的重启,或者说自己特有的属性或方法。
03:07
那么咱们也讲过说此类呢,它这个功能一定比我们这个负类功能要强大一些,或者最起码跟你一样,那这呢,就使得我们回头咱们在开发中用的时候,在咱们前面也讲了多肽了,凡是你要需要用到人的时候呢,我都具体看一下你到底是想要哪种人,那到时候呢,我们都去拗具体子类的对象,我们拗的都是子类对象,以至于呢,后边呢,慢慢的都不需要你再去拗一个person了。那这个时候呢,我们说既然这样,既然这样,我还不如直接明确出来说我这个人这个类呢,以后呢就不找对象了,我这个父类以后就不再找对象了,那么怎么证明说你不再找对象了,咱们呢,需要拿一个关键字去修饰,这个关键字呢,就叫做abstract。就像咱们前面说这个说一个属性一样,这个属性通常呢,一开始是个变量,谁都只要你能掉它,你就可以改它,然后后边呢,说我不想让你变了,我们加上一个final,那这时候呢,表示你就不能变了,那么这个人这个类也是一样,原来的话呢,你可以去new a person,可以去造这个对象,现在呢,我加一个abstract,一加上以后表示的就是你这个类不能够去new对象了。
04:22
你要想去造对象,你不也继承了吗?这个结构呢,你子类也拿到了,你去造你这些子类的对象。哎,就这个意思,那也也可以举我们生活中的一个,再举一个情景,就比如说一个公司一样,公司刚创业的时候呢,人都比较少,这呢,比如是公司的一个老大是吧,哎,很多时候呢,还需要这个亲力亲为啊,去这个擦个地呀,干个啥的是吧?哎还得需要去去做,然后后来呢,发现这个公司人越来越多,然后这个部门呢,分的越来越细,市场部啊,市场部又分为这个线上的市场啊,线下的市场啊,就像咱们这个商务部一样,这个刚开始的时候呢,肯定比较简陋一些,那讲师呢,可能也得需要干很多其他的事情,甚至说是吧,那现在的话呢,这个规模已经比较大了,那这时候部门就分的非常细了,那这个大家过来呢,都有咨询部咨询的,又分成了很细的,有线上的,有线下的,后来又多了,还有一部二部啊,然后呢,有这个专门的教务的部门的,然后这个教学的部门又分成这个有有教学的,还有专门辅导的啊,就业的,就业分成有懂技术的就业的,还有不懂技术的就业的等等,就分的特别细了,特别细以后呢,就是上边这个老大呢,就不需要再去亲力亲为的去做了。
05:31
他只要把他那个当初工作的那些经验呢,传授给下边,把他这个希望这个公司怎么管这个思想呢,传授给下边,下边这些人去做就可以了,就跟我们现在说的这个事呢类似,只不过这时候呢,我们这个老大呢,明确的加了个标签说叫AB说抽象的就意思就我我不再去做这个事了,你别理解成说他就不能生孩子了啊啊不是那个意思了,哎,就是说具体要做事的话呢,就下边这个人去做,这呢就有点跟我们这个有点像,行这呢就我们说的这个例子了,那说了这样的一个情景以后,下边呢,咱们就可以把这个情景呢描述一下,这就是咱们关于抽象的一个这个写法了。
06:11
嗯,这呢,咱们还是拿咱们比较擅长和熟悉的person是吧,万年不变的person来说,嗯,这呢,咱们说的是叫atract,它的一个测试,这个呢,咱们可以看成是一个叫关键字的使用,那就是abstract关键关键字的一个使用行这个关键字的使用,刚才咱们其实提到一个问题,说这个obstract呢,我让它去修饰个类了,那至少能够说明它可以用来修饰类,这呢,我们写说obstra它呢可以用来修饰的结构,这个结构呢,刚才呢就提到一个类,那除了类之外呢,Abstract还可以用来修饰方法。
07:04
那修饰个方法,那就叫做抽象方法了,这是我们说的这个事,那抽象方法抽象类这呢,相当于我们把这个abstract呢也给翻译了一下,它呢大家就可以理解为叫抽象的。就这个意思,行,那拿咱们这个人来说,这呢,我就直接呢造到这里边儿了,先声明这个person,然后呢,这个person呢,也会有它的具体的子类了,这呢我们也可以整这个叫student。哎,让他呢去extend这样这个person行,但是呢,我先提供它的一个词类,下边呢,我对这个person类呢,这个信息呢,进行一些丰富词征性的name in特性的A,然后呢,它有具体的这个属性in方法这里人吃饭。啊,这个walk走路行,这是方法,然后呢,我们也可以去提供它的这个构造器,这是一个空单构造器,提供一个带餐的。
08:23
保存一下样好,这呢是我们这个父类,这个此类的话呢,目前我们要是没有进行一个这个方法的重写的话呢,那就暂时呢,就先这样,属性呢,也没有特别的,那就这样行,咱们现在呢,主要先关注于这个副类的情况,目前为止都是我们已经讲过的知识,你需要呢去new副类就new副类,需要new子类呢就new子类,比如说我这块呢,就去new一个person行,New完这个person呢,我可以给这个person呢去属性呢,那时候这时候没有加权限,你也可以直接调属性,我就不体现了,我直接呢来调研方法叫it方法,这个执行完全没有问题。
09:01
完事没有问题,调属性的话呢,你就看权限够不够了,这时候够其实也能掉,那现在的话呢,我们在这个情况下,我们说加这个abstract,我们用abstract呢,去修饰个类表示,这个类呢叫抽象的,它的意思呢就是不能够实例化了,所以说当我们把这个abstract加上以后。保存明显的就看到这报错了,报错的信息说cannot啊,Tenion it不能够实例化,我们这个person,言外之意呢,就是我们此时的person呢,就不能够再去找对象了。这呢就是说的叫不可实例化,一旦这个person类抽象了,就不可实例化。行,那这块呢,咱们相当于就关于obstract呢,去修饰这个类呢,得讲一讲啊,就饰类这个类呢,我们就叫做一个抽象类,一会呢我们再展开来说一下,它来修饰一个方法,方法呢,我们自然而然的就叫做抽象方法,好那刚才呢,咱们明确的看到了一个点,就是说当我们用abstract去修饰类的时候呢,我们明确明确的表明说此类不能实例化,就是加上abstract去,Abstract去修饰这个类的话呢,直观的一个感受,就像咱们说static一样,一加TE就随类加载,加载了就一份,那一说到obstra修饰个类,那第一反应就是这个类不能实例化,这个类不能实例化就是我们给这个类加OB的目的也是为了让它不能实例化。
10:49
哎,记住这个事好,此类呢就不能实例化,实例化呢就是造对象的意思了,那么不能够造对象了,那问这个类我们说呃,造对象的功能呢,是构造器来做的,那现在呢,我没有,呃说没有对象造的这个功能了,那问还有构造器吗?你明确的看到了,我这是不是有啊?那再问一个问题,就是说既然呢,你不能造对象了,我有构造器,那构造器干什么用啊,说没有用了,对吗?诶对啊,那些同学都提到了,就是你自己不能去掉了,是你因为你不能new嘛,但是呢,我们子类,咱们创建一个子类对象的时候,是不是一定会掉负类构造器啊。
11:40
对,就是说你的功能不止一个,一个呢是你自己造对象,另外呢,我们这个子类的话呢,也要调你的构造器,这涉及到叫子类对象实例化的全过程了,所以这块还是要用的,也就是说呢,咱们在student这一块呢,我还是可以去写一个构造器,这个呢,我们比如说行三呢,就叫string name in the edge,我这里边是还可以去修复一下的。
12:04
当我们去造这个student对象的时候呢,我还是要用一下你的,所以这时候大家要注意,就是我们抽象类当中啊,虽然你是一个抽象的,但是类中呢,仍然是提供构造器的。这个我们说这个抽象类中,而且呢,咱们说你要不显示的写它是不是也有默认的,那就相当于抽象类中是不是一定有过到期啊,这句话泪中有过道器这句话自始至终都是对的,只要是累就有过道器。那你自己不能够去拗了,那子类呢还需要用的,那也就是说抽象类中呢,一定有播到器,那就是便于子类对象实例化的时候调用。或者我就直接就是子类实例化的时候调用,这呢,咱们就相当于涉及到咱们前面讲的这个知识。
13:01
啊,这叫子类对象实例化的全过程,当然咱们提过了,说你在这个造对象的过程当中,肯定是要调用父类的构造器,以及副类的,副类知道你这个object类的,哎,正因为呢,我们调了副类的构造器了,所以说呢,我们在此类当中,你才可以去使用副类的这样的一些方法和属性,因为人家加载过负类,因为掉构造器了,所以就加载负类了,行,这是这个问题了,那通过这呢,咱相当于也说清楚一个问题,就是咱们这个抽象类的话呢,它是不能够实例化了,那通常咱们在开发当中呢,都会去提供抽象类的子类,让这个子类呢去实例化。啊,写一下开发中,既然呢,我们这个抽象类不能实例化,那我们说都会。提供叫抽象类的子类,然后呢,让呃或者叫提供都会提供抽象类的子类,然后呢,让这个子类对象实例化。
14:02
这个完成相关的操作,对,就是这样个意思。我们都会去提供这个抽象类的子类,如果你要是不提供的话呢,那这个抽象类呢,就很尴尬了,他自己还不能造对象,你还不提供子类,那不就没用了吗?成这么个局面了,所以咱们都会去提供它的子类,诶就是这样个情况,好,这呢是咱们说的这个obstra修饰一个类呢,咱们暂时呢就先说到这儿,接下来咱们说的叫abstract呢,去修饰方法,Abstract去修这个方法,说这个方法呢是抽象的,抽象呢就没有那么具体了,何为抽象呢?就是说这个方法呢,就没有方法体了,哎,这个方法就没有方法体了,比如说这里边我们有一个it方法,这个it的方法呢,我现在想给它变成一个抽象方法,注意我把这个删掉,这叫抽象吗?
15:03
这不叫,这不是抽象方法,这个大家写的时候注意你说诶这我也没有方法体,这有,只不过你里边呢没写东西而已,这个大括号之间呢,这都叫方法体了,这个不是抽样方法,那怎么才是呢?就是把这个大括号呢,也需要这样写,但这样写的话呢,你跟下一个大括号我们表示这个边界了,你原来有大括号有边界了,我下一个结构呢,就知道是重新开始的,你现在这也没有边界了,那这块我们就拿一个分号表示呢,这就是你的这个倒头了,这呢是一个抽象方法,当然现在呢,报错是因为你这不是抽象的,所以它就报错了,没有大括号嘛,那我这呢需要加上abstract。那这呢,才是一个抽象方法。行,这个抽象方法原来没有见过,很奇怪,这个方法呢,只有方法的声明,没有方法体。在这明确一下,什么叫抽象方法呢?说我们说抽象方法只有方法的声明,没有方法体,那大家想咱们去写一个方法的主要目的是不是主要呢?就是调查的时候呢,去执行这个方法体啊,那这个方法连方法体都没有了,那这个方法呢,还要不要去执行呢?
16:30
我说还能不能去执行了,你要去执行这一的方法,你说他干啥事啊。啥事也干不了,那也就是说呢,我们这个抽象方法的话呢,你要是这样写的这个方法呢,就不应该被调用,就不应该不应该被调用,那这个不应该被调用这个事怎么去体现呢?咱们现在还没有涉及到这个这个什么study这个事,咱们一会再去说那个问题,就基于咱们现在情况,我这个方法要想要想被调,是不是得拿对象去调,是不是得拿对象去调啊,那我们要拿对象调,你这个方法写在person里,我是不是就得造person对象,那要是能造person对象,那就有可能会掉它,那能造的话呢,意味着你这个位置就没有它了,你看我这样一写它就报错了。
17:21
这就相当于它的一个保护的一个机制了,就是说如果我们在一个类当中存在抽样方法,那么我们就得保证这个抽样方法呢?是不是不能够它所在的这个类啊,是不是就不能够造对象,要能造对象不就能掉了吗?能掉这不是显然不对吗?它有没有方法体,那我们怎么保证它不能造对象呢?是不是你这个类就得是一个抽象类了?你看这个逻辑还是很清楚的,那这里边呢,相当于就出来一个事儿,或者出来一个结论,就是说包含抽象方法的类一定是一个抽象类,你想对吧,对的,哎,这呢我们写一下。
18:07
写到这儿说包含抽象方法的。类一定是一个抽象类,主要目的呢,就是为了我们保证这个抽象方法呢,你不要让对象去掉,那怎么就不让对象去掉了,我不让你有对象不就完了吗?那就意味着我就把你这个类呢做成一个抽象的,那么反之就是抽象方法所在类一定是个抽象类,反之我们这个类是一个抽象类了,里边一定会有抽象方法吗?不一定,咱们那会呢,不就没有,它不就写的是有方法体的吗?对,所以说反之呢,这个抽象类中是可以没有抽象方法的。我这个类里边呢,这个方法都是有方法体的,我这个类是个抽象类,只是想表示呢,我自己不想造对象了,或者说不让我这个类造对象,仅此而已,你这个方法的话呢,不抽象没问题,此类是不是还可以直接继承一下用啊?
19:10
哎,这个情况这个呢,大家也不要去死硬背,就是你理解的啊,理解这个事儿了,其实很清楚很简单,好,那么说完这个事儿以后,那大家再我们往下说。你看我往这一放,是不是报错了?为什么这时候报错了?说你这个词啊,就在哪说你呢,必须去实现一下你这个person里边的一的方法,因为你这个方法抽象啥意思,我们这两个方法抽象的也好,不抽象的也好,是不是被这个子类继承了,子类继承以后,那言爱之义呢,就是你是不是这相当于有两个方法了,这个方法还好,我们造个对象可以调,那你student的对象是不是不能够去调这个方法,目前呢,是不是没有限制。
20:01
那这时候呢,我们需要怎么办呢?对,两方面,就是要么你把这个方法重写一下,重写一下,那就是我们写一个public avoid,写个it。就是相当于说我们这样这个父类中有一个抽氧方法了,它相当于是不是明确告诉我们说子类这块呢,你得重写一下,重写一下,重写一下那就没事了,说这个学生呢,应该多吃有营养的这个食物,这呢就相当于是咱们重写了,你重写以后呢,这个没问题,你造个student对象,你该掉it该掉work该掉掉,这是一种思路,另外一个思路呢,就是你没有充血,没充血意味着你就有个抽象的,你这里边就有个抽象方法,然后呢,你得怎么着,对,那就是你这个类是不是你还得是个抽象类了。对,就得这么着了,这是两种处理的方式,那就看你实际开发中你到底想干什么了,那我们总结出来这个话呢,就是这样子的了,说呢,若若什么呢?若子类重写了父类中的所有的抽象方法,则呢,此,呃,或者重写了所有的抽象方法以后啊,这个此此类方可实例化。
21:27
重写了父类中的所有的抽象方法后,啊此,此类方可实例化。就是你才能够去造对象,那么再换句话说呢,说若子类没有重写父类中所有的重要方法。没有重写父类中的所有的抽样方法,就意味着有些方法呢,抽样方法呢没有重写,那么则意味着此子类呢,也是一个臭氧类。
22:01
也是个创类,哎,那就意味着你需要使用这个obstra呢去修饰一下,这呢就相当于是对应着咱们目前的两种处理的方式,刚才演示的这里边呢,提到一个叫所有的抽象方法,那这里边不光是我们student副类叫做person,那如果我们person还有一个副类,比如我叫class,叫create,这叫生物了,在这里边呢,我们去提供一个public,叫abstract VO叫breath,不同的这个生物它的呼吸的方式不太一样,我这儿呢就写成一个抽象的了,抽象方法所属的类。是一个抽象类,是不是讲过了,那么这个类被我们的person所继承,你看咱们现在目前这个代码这块下边都还没有错,当我把这块呢,CTRLV1加一保存这个时候,我们person里边问有几个抽样方法。
23:04
就有两个了,一个是他自己的,一个是继承类的吧,既然你有两个了,那我们这个student student这块,因为啊这块也没报错,因为咱这是不加threat了,我把这个去掉,把这个打开。你只重启了一个it,另外呢,没重写那是不是也不行啊,所以呢,你必须呢,我这就直接点一下了啊,也得把这个breath这个方法呢,得去重写一下,那也得重写一下,就是你只有重启了所有的,所以这个负类呢,指的不不管是直接负类了,间接负类呢都算。这个我们称作叫学生呼吸,学生呢应该叫呼吸新鲜的空气,新鲜的没有雾霾的。这个空气得这样。这以前说这个雾霾的时候呢,这个这个刚开始有雾霾的时候呢,大家还不太懂,这以为是雾呢,就是早上一起来之后哇,看到有雾了,然后猛吸一口气是吧?啊这个后来知道是雾霾了,然后还明确知道说是这种叫金属小颗粒啊,吸到肺里边呢不好,甚至说致癌等等,哇把大家吓得不行了,这种呢,一些专家又跳出来说雾霾呢,其实也有好处,然后就开始扯了,就是吧,这有啥好处呢?说雾霾呢,是一种金融小颗粒,这个呢,就是比如说美国这个这个这个跟中国要发生战争了,这时候呢,就呃通过这个导弹定位要打你的时候,这时候它定位呢就不准了啊,因为它这个金融巧克力的这个光的反射就给他折射的就偏了,是吧,这个首先呢,这个基本上打到你的概率呢,打的概率就极低是吧,再者呢,它可能本身也没想打你,结果偏了打到了是吧?嗯,所以说就有点扯了,就啊,而且还有的说说这个雾霾的这个这个。
24:59
这个老百姓家做饭的时候,这个油烟啊抽的不干净,都放出来了是吧,就特别扯啊,你像这个北京呢,一开这个大会的时候,这个之前是开这个APEC还是开什么,只要一开会的时候空气特别好,你说那时候老百姓是都不做饭了呢,不大可能性是吧,那这个其实政府特别知道这个雾霾是从哪来的,就是想让这个天变蓝的时候呢,绝对是第二天能够看到蓝天的控制的特别好啊,行,这个这个写完了啊,就这呢,我们把这两个方法呢,都做了一个重写,重写以后呢,嗯,你就没有重样方法了,这时候你这个类呢,就可以实例化了,就这个意思,其实通过咱们刚才这样几个例子的话呢,这个来回变大家呢,基本上我们把这个obtra修饰类和方法的这个核心的内容呢,其实就把握住了。
25:46
嗯。
我来说两句