00:00
好,那么接着的话呢,我们来看一下这个爱贵507啊,这个单词呢,叫inca啊,翻译过来呢,就叫做封装性,好那么下边的话呢,我们来讲一下这个泌对象的特征之一,叫做封装性,在说这个之前呢,我们在稍微的回忆一下,咱们在提到面向对象这三章的时候呢,诶,我提过呢,叫三条主线啊,三条主线,一条主线呢叫做类及类的内部成员。哎,我们已经讲过了属性。方法是吧,然后后边呢,我们讲完这个封装性之后呢,下边要讲的这个叫constructor啊,这个呢就称为呢叫构造器,呃,是我们接下来要讲的第三个成员,这三个成员呢,在对一个类来讲呢,是最重要的啊,后边呢,我们到时候呢再讲,比如说代码块内部类啊,这两个重要性呢,就差很多了,这是第一条主线的内容,第二条主线呢,我们就叫做面向对象的三大特征了。啊,这里边儿我们要讲的就是封装继承多肽,对啊,那我们现在要讲的这个呢,就属于第一个特性叫做封装性。啊,那么这三个里边呢,比较难的呢,是我们呃后边要讲的这个多态性啊,相对来说就难一些啊,到时候呢,大家都注意听啊,然后呢,第三条主线呢,叫呃其他关键字的使用。
01:10
诶,我们在上述的讲解过程当中会有一些关键字了,那还有一些关键字,那这条主线呢,目前啊,像我们讲过的这个,比如说package啊,啊import呀,是吧?哎,后续呢,我们还会讲this啊,Static final interface abstract等等等等。OK啊,这呢就是我们已经讲过的这两个好,这呢,就我们三条主线呢,都会往前去做这个推进啊,OK,那我们现在要讲的呢,就属于这个叫诶封装性。好,那么首先的话呢,这里边儿提到说为什么需要封装性。啊,这呢,我是上来抛这个问题啊,以后呢,我们讲每一个知识点,包括呢,比如说讲构造器,说为什么需要构造器,可能我上来呢,讲的不是这个事儿,哎,但是大家呢,下来复习的时候呢,这个咱们说过一个小的细节的学习的方法是吧,大家呢,都可以针对于每一个知识点呢,去问一个3W是吧。
02:00
哎,说这个东西呢,我们为什么要用呢。哎,知道为什么要用了,好这个东西它到底是什么呢?哎,然后呢,这个东西到底怎么用呢。是吧,诶这样的三个W啊,当然重点呢,肯定是耗了。诶,但是呢,你不能光去操作,你得看看,诶我们为什么要用它呢。对吧,诶这个呢,其实也挺重要的啊,诶直观上建立一个这个感性的认识啊好,那我们这儿呢,关于封装性呢,上来就问一下,说为什么需要封装性,诶我们看一下课件啊,首先呢,关于这个封装性呢,在这呢,我们举一个生活中的例子。哎,说呢,我要用洗衣机了。诶只需要呢,按一下开关啊洗涤模式,然后呢,把这个衣服呢放进去,然后倒上这个洗衣液呢就可以了,说呢有必要了解洗衣机内部的结构吗?啊,有必要碰电动机吗?呃,这个显然都不需要是吧?哎,说呢,我要开车了啊,我不需要懂这个离合呀,油门啊,制动这个原理和维修啊,我们照样也可以去驾驶。OK啊,行,这呢举着我们现实生活中的两个例子,诶,下边呢,啊说客观世界里呢,每一个事物的内部的细节啊,实际上呢,都隐藏在其内部了。
03:06
说外界呢,无法直接的操作和修改,诶,我们只能够通过指定的方式进行访问和修改。你看就好比这个洗衣机,它内部这个结构呢,可能还挺复杂的啊,发电机是电动机,什么个原理,跟电这块怎么去接触是吧?诶我们都不用管,我们只需要呢,诶按一个按钮,诶我选择一个模式这块呢,我就知道呢,它能按照我的这要求呢去进行操作了,里边这个细节呢,咱们其实都已经给诶封装起来了。是吧,已经封装起来了,那开车也是一样哈,这个车的话呢,我们说这个复杂程度呢,要比洗衣机要高得多。啊,咱们国家现在这不是主推电动车啊,因为在这儿呢,有可能会弯道超车是吧?呃,其他的你像这个传统的燃油车,西方国家都已经积累了,甚至说上百年的这种技术了哈,这个里边的复杂程度呢,是会很高的,当然另外一个点呢,还是因为专利比较多啊,咱们不可能绕过这些专利了哈,好,那既然这么复杂呢,对于开车来讲呢,其实我们不用管。
04:02
哎,我只需要知道呢,简单的这些原理就行啊,你考个驾照这个这个一两个月就能拿下来了,是吧,那你就会开车了啊,所以这些细节的话呢,我们也不用关注那么多,他把细节呢也都进行了封装。啊是这样子的是吧,诶那包括呢,咱们平时呢,说寄快递。啊,寄快递的话呢,不管您是买东西也好,还是这个寄东西也好啊,诶这个呢,是你本身要寄的东西了,通常我们也都会把它放在一个盒子里边,诶然后呢,上边写上这个地址啊,他就给我们邮走了,这个呢,其实也理解成是一种封装了。啊,就是你光看这个盒子呢,你也不知道里边是什么。是吧,诶这是一种封装,那这个我们快递寄快递再加一个盒子,你说这是。要要要要,为什么呀。我直接邮这个东西。啊,怕动怕乱,乱动里,比如说你这系的是一条金项链是吧。你就金项链拿个小塑料袋一放,然后上面贴个说寄给谁,这个总感觉不太放心是吧?诶,所以说呢,就是你加一个盒子的话呢,它呢,呃,对你这个数据呢,做了一个隐藏啊,使得这个数据呢,是不是会更安全一些是吧。
05:06
对,这个安全呢,一方面呢,就是说我们怕别人随意的就打开去用了,呃另外一个安全呢,就是说,比如你这是个花瓶,花瓶的话,你加上一个箱子,加上一些防撞的,这个也能让它防碎是吧。OK啊OK,那么基于客观世界这样的一个想法,咱们这个代码的话呢,相应的我们也可以呢,体现这种叫封装的特点。啊,怎么叫封装特点呢?呃,比如我们,诶,当然我们不像快递一样用个盒子去装了哈,这个呢,我们相当于就提到了后边要讲的叫权限修饰符,诶我们去修饰这样一个结构,比如说这是一个方法。那修饰完以后的话呢,呃,这个我们就可以考虑呢,把它这个细节呢给隐藏起来了。哎,那么外界的话呢,他就看不到这里边儿这个细节了。那那他能看到什么呢?诶他我对外暴露的话呢,比如我我我这是一个方法是吧?这个方法呢,我也用一个全修饰符去修饰了,就把它呢对外暴露了,然后这个方法内部呢,它调用了下边这个方法,然后这个方法呢,我加个权限修图,不让它对外暴露。
06:04
相当于呢,就是核心的这个代码的话呢,外界是调不了的,他要调呢,只能调我们能够让他看得到的这样的一个功能。哎,就是这样一个特点,哎这个呢,其实就体现为是我们现在要讲的这种封装性。OK啊行,然后呢,我们再稍微的提点这个理论性啊,高大上的这个问题,哎,刚才呢,建立了一个感性的认识啊好,下边说随着我们的系统啊,就我们写的这个项目啊,越来越复杂,类呢会越来越多,那么类之间的访问的边界呢,我们要把控好。啊,那么面向对象开发的原则呢,就提到一个叫高内聚合六合。啊,这就属于我们理论上呢,说为什么需要它是吧,这个高振级deal耦核呢,它实际上是软件工程的一个概念啊,Unix source系统呢,设计的时候呢,经典的原则啊,这个往后一往前一追溯的话呢,就特别早了啊,诶首先呢,我们看下这个词,什么叫内惧啊。诶那句呢,它指的是一个模块啊,内部的各个元素彼此之间呢,结合的紧密的程度。
07:04
啊,紧密的程度,然后耦合呢,它是指的是这个不同模块之间的这种啊,相互之间调用的这样的一种啊程度。啊,那那句呢,意味着这个重用和独立啊,然后耦合呢,意味着你可能牵引发动全身啊,因为相互之间会使用嘛。哎,那咱们写程序的时候呢,这里边儿提到一个原则,我们追求呢,叫高内句。诶高那句呢,什么意思啊,就是我们尽量的,我们这个数据呢,就不对外暴露了,然后我们内部的细节呢,自己来完成,外界呢就不允许他去干涉。啊,这涉及到就是内部元素之间的哈,好,然后这个耦合呢,诶他们相互之间调嘛,相互之间既然要用好,我只是往外暴露能够用的或者需要用的这样的一些功能,不需要用的话呢,我就不给你暴露了。哎,这个呢,我们体现了一种叫D耦合。哎,这个稍微能理解这个意思吧。哎,再说一下啊,就是内句呢,指的是这个模块内部的各个元素,比如我们这里边可以理解成各个类呀,或者你类里边的各个方法呀,我们把特定的一些这个内容呢,就封装到不同的类里边了,然后呢,把这个类里边呢,特定的一些功能呢,我们就封装到不同的方法当中了,哎,这个呢,就体现了一个叫内句。
08:17
啊内句啊,然后呢,一耦合呢,就相互之间我们要调的时候呢,我们只对外暴露呢,哎,你必须要用的这些,不需要用的这些细节呢,我就不对外暴露了。啊,所以呢,就是体现了对外暴露的话呢,尽可能的少。哎,这样的话呢,我们就体现了叫高内聚合,诶低耦合。啊,这个稍微的有点抽象是吧,诶我们把这个事儿呢,稍微往这块去粘一下啊,诶从理论上来讲的话呢,我们这要遵循的原则呢,就是诶高那句诶这个呢叫诶低耦合。就行了啊好,这个呢,稍微的有点抽象,那么通俗的来讲呢,哎,大家你看下边这句话啊。通过这句话说,所谓的封装呢,我们就把客观事物呢,首先呃封装成抽象概念的类,然后并且呢类呢,可以把自己的数据和方法呢,呃指向可信的类或者对象开放。
09:12
前面这句呢,其实提到了,就是这个内聚的事儿。然后后边这个呢,我们要对外开放了是吧,开放的话呢,我们只向可信的这个类或者对象开放。啊,这就相当于是让他们之间构成耦合关系了,然后没有必要对外开放的话呢,我们就把它隐藏起来。哎,这个呢,提到了就是这个耦合的啊,这样一个特点叫低耦合是吧,通俗来讲,哎,大家呢,其实把这句话呢,还稍微的体会体会就可以了。所以通俗来说,就我们体怎么体现出这个封装性呢?就是呃在设计类和类中的呃结构的时候,比如说方法是吧,我们把该隐藏的隐藏起来,把该暴露的呢暴露出去。那这呢,就是我们封装性设计的一种思想。啊,稍微的体会一下啊,好,那么下一个问题就涉涉及到了,说我们在Java当中,那如何去体现这种数据的封装,呃,如何体现它的隐藏和暴露呢。
10:08
哎,这个呢,我们就提到了,说使用权限修饰符来做了。OK,所以呢,这块那我们就引入了这个叫权限修饰符啊,那权限修饰符这块呢,我们稍微说一下,说呢Java呢,那叫规定了,叫四种权限修饰。哎,四种权限修饰啊,这个分别是。哎,分别是我这边写一下啊,诶叫做诶private。嗯,然后呢,缺。我一直觉得这个应该就念缺醒,但是他这个出不来是吧。缺省了是吧,好,然后呢,这个呢叫protected。这个单词呢,好多同学都念的不对哈。这个protect呢,这叫保护是吧,加个ED呢,叫受保护的。对,这个叫私有的是吧,哎,Protected受保护的啊,别念成protected了。
11:03
还还傻傻的是吧,好多同学这个念的都都不对啊。诶,然后最后一个呢,叫做public,诶这个叫公共的,对啊这呢就是Java呢,它规定了四种权限修饰,诶分别呢就是这四种,然后呢,我们使用这四种权限修饰呢,去修饰类及类的内部成员。哎,然后呢,体现什么呢?体现的就是什么时候诶能用,什么时候不能用,就是在被调用的时候呢,他们可见性的一个大小。哎,我在这写一下啊,所以这个作用是什么呢?这个呢,我们说啊说呢,我们可以使用啊四种权限修饰。啊,来修饰类及类的内部成员。啊,然后当哎这些成员。被调用时。哎,被张时,然后呢,体现叫可见性的大小。
12:04
稍微的我分析一下啊,一会儿咱们就举这个例子了。呃,咱们呢,其实你要说没见过吧,也见过一些了,咱们用public修饰类。Public呢,去修饰方法是吧,其实已经见到过了啊,其实这就已经算是一种权限了,只不过呢,前面呢,我们没有详细的展开去说这个事儿哈,那现在说呢,除了public之外呢,其实还有好几个其他的,我们用这四种权限呢,去修饰类和类的内部成员,比如说属性啊,方法呀,是吧,一旦修饰好以后,当我们去调用比如说这个方法的时候,哎,就体现了这个可见性的大小。什么叫可见性的大小呢?就是说呢,诶,你要是public的,就意味这个权限很大,我就能看到你。你要用private修饰呢?那个权限就特别小,小到那我就看不见你了。哎,其实就是所谓的隐藏起来了。啊,这不就体现了说诶怎么体现把该隐藏的隐藏,该暴露的暴露呢?诶隐藏你说呢,这个我就只能我自己用是吧?诶你就把它设置成最小的叫private了,哎你要说呢,我这个暴露暴露的话呢,我想暴露的呃尽可能的范围越大啊最大的话呢,就到public了。
13:10
那Java的话呢,他没有说就给俩,他给了四种,也就是说呢,你这个可以分的更细一点。哎,就是这样的一个场景。好,那么这个事儿呢,咱们就说完了啊,所以说这个封装性怎么体现呢?就是四种权限修饰。啊,把这句话一说,哎,这个你的理解呢,就是比较到位的啊,那下边呢,咱们通过这个案例呢,去体会一下。好,这块你看我写一个这个具体的代码了啊,这个代码呢,咱们也去让大家感受一下说诶为什么说,诶我们要有这种封装型啊好,我这写一个呢,叫animal的一个test。好,这呢,我就把这个animal这个类呢,也写到这个文件里了啊,Class叫animal。哎,这么着啊,这个呢,咱都知道叫动物是吧。哎,小动物啊好,那这个类里边呢,我们首先呢,去声明它的属性啊。
14:00
首先的话呢,咱就简单一点啊,哎,动了个名,哎有一个这个腿的个数是。哎,就可以了,那这个是他的名字啊。嗯,好这就可以了啊,好,这呢是我们声明它的这个名字,呃,这个属性啊,当然它对应还有这个相应的这个方法啊。哎,方法呢,咱们就简单的先写一个了,哎,叫Y的一个叫it啊。哎,这个呢,叫动物觅食是吧。这动物都叫觅食了。或者让你叫动物这个进食捕食啊,那你中午该吃饭了,你不能说我该去觅食了是吧?诶OK啊好,这个呢,这是属性,这是方法了啊好,那么呃,在以前咱们没有特别的去强调这种权限修饰的时候呢,比如说下边呢,是我写的一个类,然后上边这块呢,我想去诶创建这个类的对象了。哎,我们就这样写的啊。诶,比如一。诶,你有一个具体的animal对象了,到完那个对象以后的话呢,我们接下来讲过,说通过对象去调属性,调方法,诶我们这就拿这animal的点,诶比如说调下这个内幕。
15:06
哎,起个名字。嗯。蛤蟆,整一个好点的啊。这个。啊,金蝉啊。行。哇,这个这么文艺是吧?好,我这animal animal合适吗?那换一个啊,这个这个。啊,金茶,你说的是这个茶呀。好吧,啊,还是蛤蟆是吧。行就就它了啊,哎,然后呢,我们接着再通过这animal的点去来一个leg是吧,哎,这就给这个腿呢去赋一个值。咱正常点行啊,诶四条腿啊,这就负上值了啊,接着你拿这点去调个一的方法。哎,这这这都是没问题的是吧?啊这块执行的话,当然这个也都OK了啊。然后呢,我们在这个位置呢,你也可以去打印一下,当前你打印呃,你设置的这个具体的情况,比如内幕是多少,哎通过连点哎调这name啊,哎逗号一下啊legs啊。
16:14
好把它这个属性的呢,我们打印一下。那长就出来了啊行,这点都是没问题的,然后呢,我们这里边说一个场景啊,呃,我们在这个animal这个类的外部呢,造它的对象,调它的属性,说现在的话呢,我们调了一个属性,比如说以为例,那用户呢,有可能会这样的值,比如说来一个负四。诶,刚才大家说三条腿三条腿,你这还算保守了是吧。来一个负四条腿。一上来就欠别人四条腿是吧?这个的话呢,首先我们从赋值的语法来讲的话,肯定是可以的啊。印的类型呢,也能取负四是吧,那这时候你要去打印的话呢,还真就是负四的。啊,那显然呢,不符合我们生活的这个常识的这个实际了是吧。
17:01
哎,那我们就需要呢,对呃,用户在给这个Lex赋值的时候呢,加入一些限制的逻辑。比如说要求你这个值呢,得大于零。等于零呢,也行吧,是吧,诶好歹你得是个正数,你不能整个负的啊。诶,当然那个内的话呢,我们也可以加一些限制,比如说呃,你你不能少于几个字符啊等等的类似的是吧,不能多于几个字符啊呃,也可以做这种限制。OK,好,那么我们要考虑,咱就以腿为例哈,我想给这个属性加限制条件,不能让这个值为负的,你说怎么加?这显然呢,相当于是用if语句了是吧?嗯,你在这块写。咱们也没讲过在这儿写代码呀。诶,有没有同学试着这样写过类似的代码?比如把这个输出语句写到这儿。对,肯定报错,为啥?对啊,咱们讲这个类里边目前为止就能有属性跟方法是吧,你说你这既不算属性也不算方法。
18:05
啥都不是,这就一个执行语句,这个执行语句呢,你得放到这个方法里边是吧。对,这种是肯定不要写了啊。好,那我们在这块呢,给这个呢,就相当于啊,你在这个位置,你试图呢,去加上一个说X啊,你得大于等于零是吧,这个事儿是不是这样写也不靠谱。啊,那那怎么办。哎,对提到了啊,那这个属性呢,可以在方法里边呢去调用,那我们在调方法的时候呢,给它对这个呢进行赋值不就可以了吗。哎,所以呢,我们就考虑呢,这样去做啊,哎,我这儿呢写个方法。哎,Public啊,这个方法的话呢,就专门给这个赋值的。你说我还要返回,值吗?就不要了是吧?哎,那这个呢,我们就叫做设置了,所以叫set啊,诶那这块要不要参数呢。不要不要,那问题那个值从哪来呢?得有是吧,这个L啊好,那么这个L呢,就是你给这个属性值的这个值啊,所以我们在这判断说L你得大于零。
19:07
啊,或者我们说正常这种动物来讲的话呢,一般这个腿的话呢,都是偶数啊。好像自然界没有。就正常的这个动物的话,应该没有说基数条腿的是吧。嗯,好,假设呢,我们就这样来了,那蛇的话呢,不就是零嘛,是吧。满足这种条件的情况下呢,我就让啊,你把这个L呢复制给这个了,否则的话呢。哎,我就在这边写句话啊,说哎,你输入的这个数据啊。咱就要非法了。注意你别看到非法很紧张啊,这个咱们平时生活当中法指的是法律了,哎,这个法呢,就是我们所说的这个规则啊。好,那这样呢,我们就写完了,那写完以后的话呢,我们就可以在给属性赋值的时候呢,是不是就不要调这个属性是吧?哎,那我们这儿呢,就通过animal。哎,第二,哎,咱们去调这个方法。哎,在方法里边,比如说你写个二,哪怕说啊,哎,然后呢,这个二呢,因为满足你这个条件,所以他就给Le附上了。
20:06
哎,附上以后呢,我们再去打印。哎,你看这时候我们就有这个值了。哎,说我这块要不是二啊,我给大家复制一个负二。哎,这个呢,来,哎,或者你上面这个开着也行哈,来下边来个负二。哎,你又想把它这个二呢改成这个负二了,哎,再run一下。哎,你发现了这块呢,说你这个数据非法,哎,没有给附上吗。哎,通过这样一种方式呢,我们就能够限制是不是我们对象对这个属性的一个调用了。啊,这个限制呢,是我们通过方法来做的,但是我说这个时候的限制啊,其实我这个底气呢还不足。因为我们还是可以直接来掉属性的。啊,只不过呢,就相当于你又给了一种方式,让我们去加入这个判断逻辑了啊,但原来这个事儿呢,并没有给禁掉是吧。那我们怎么体验呢,就不让用户呢,彻底做这个事儿呢。哎,我在这个likes前面呢,我就加一个权限修饰叫做private。
21:02
啊,就表示呢,我们把这个属性呢,给它私有化了。哎,说白了啊,就是隐藏起来了,那么这时候要看隐藏了,那我现在能看着。啊,这个隐藏你加个引号,不是说你看不见了是吧。不是这个隐藏吧。这儿没有是吧,哎。这叫隐藏,就是你加个引号哈,那么这隐藏的话呢,是说彻底谁也看不见吗?那不行,对,那要谁也看不见,那你跟没定义也差不多了,诶这个呢,已经是最小的权限了啊这个权限最小呢,他也能在它类的内部看到。而且仅限于类的内部能看到。那就相当于我们要animal对外暴露的话呢,是不是就外界就看不到了。诶,所以这块呢,你这样直接呢,再去调这个X呢就不行了。哎,我在这写一下啊,说呢,因为啊legs。诶,声明为。哎,叫private的是吧。啊,是私有的,哎,出了。
22:02
咱们这个animal这个类之外。哎,就哎看不到了啊,或者讲就不能调用了。哎,所以说这块呢,我们再去调这个属性呢,就不行了。啊,它就不行了,所以说这时候呢,我们才真正意义上呢,把这个lax呢,给它保护起来了,所以呢,你要想给他去赋值呢,那就我们下边写的啊说呢,只能。哎,通过。哎,通过咱们这个叫这个方法啊,诶间接的。哎,对这个属性进行复制。啊,因为呢,我把这个复制操作就放在这个方法里了,然后呢,这个方法呢,目前的这个权限是比较大的,我们就对外就暴露了,诶那你就去调方法就行了。没问题啊好,接着往下再看啊说呢,我们在这块呢,就去打印这个name和这个的,诶你看这个不让掉。我们现在呢,这不还想看一下这个值到底是多少是吧,现在不让掉了,那怎么办。
23:02
哎,那现在这个X呢,不太能用是吧,Lex是来赋值的啊,那这块呢,是想拿到这个值的,所以我们还得是不是再提供一个方法。哎,这个方法就专门来获取这个值的,哎,我们就诶public一下了。既然你要获取它,是不是得有返回值了是吧,这个值呢,类型就是跟你这个类型是一样的,这个一般我们都叫get参数要不要。参数也要也没用啊是吧,哎,所以呢,直接呢就这样就行啊,这个里边呢,你就把这个呢给他返回一下就行。诶,这样就可以了。哎,如果这个呢,我们称为它叫设置啊,我在这块写一下啊。这个两角哎设置诶like的这个属哎属性值,那这个呢,我们就称为它叫。对,获取。啊,它这个啊属性值好,那这个写完以后的话呢,方法的权限呢比较大,叫做public了,那我们回过来以后呢,这个位置呢,我们就不用担心了啊,我把它复制一份啊上面这个我们就注掉了,哎,那么这个位置呢,我们就只需要点。
24:07
Get legs就可以了。啊,因为这时候对于编译器来讲,他看到的其实就是这个方法的反位值类型,这个int型的一个变量了。诶,所以这块呢,就相当于就诶没问题啊好,这时候我们再去做一个run。哎,这边就没有问题吗?哎,还能够拿到它。好了,那这儿呢,我就把这个例子呢,就举完了啊,通过这个例子呢,我们去体会一下,为什么我们要把一些必要的结构给它。啊,隐藏起来了是吧,因为我们不希望呢,外边的用户随意的去调用我们这个属性。哎,那么此时呢,我们就把这个属性呢给自由化。啊,那么私有化以后的话呢,外边又想用,诶OK,那我对外呢,就提供相应的方法,方法里边呢,我们就可以针对这个属性,你是设置啊,你要是获取啊,加入一些逻辑了。哎,具体问题具体分析。哎,就行。啊,那么这里边儿我们就体现了这个权限修饰符的一个使用,那么权限修饰符的使用就是我们封装性的体现。
25:07
注意一下。好,这呢,我们提到这样一个实际案例是吧,哎,我们把这个案例呢,稍微的描述一下啊说呢。啊,在题目中啊,我们给啊这个animal。哎,这个对象的这个这个属性呢,赋值啊,哎,在实际生活中啊,啊,或者叫实际的这个常识中是吧。哎,我们知道呢,这个legs呢是不能。哎,值为负数的。啊,但是呢,呃,如果啊,直接调用属性。啊,Likes。啊是不能加入啊,判断判断逻辑的是吧。啊,那怎么办呢?是吧,这呢,就我们也说这个问题啊好,那这这块呢,我们的解决方案呢,就是将这个这个属性呢私有化。
26:04
哎,私有化呢,就意味着我们生命呢叫private。加拿大私有化就是禁止在animal类的外部啊,直接调用。爱次属性。哎,当然我们确实有需要啊,我需要给这个属性赋值,哎,那接着呢,我们去,诶提供。啊,给leg属性赋值的S方法是吧。哎,这个方法,然后在这个此方法中,哎加入哎,我们这个哎赋值的这个判断逻辑。比如我们说呢,你这个if语句是吧,要求它呢得大于等于零是吧,并且它呢,曲目二呢。这个得等等于零是吧,这样的逻辑就可以了。啊,这呢,就相当于我们是赋值的这个场景啊,然后另外一个维度的话呢,就是我们在外边儿可能还想获取一下你当前这个属性的这个值了,诶所以我们还接着呢,可以去提供。
27:04
啊,这个属性。呃,获取的这种叫get。哎,这样的一个方法。啊,然后呢,这个呃,此方法对外暴露。啊,然后呢,使得啊这个。嗯,在animal类的外部。啊,还可以来调用此属性的这个值。诶这块呢,我们是设置这个方法,在这里边儿呢,加入这个判断逻辑,然后呢,接着再说一个啊说将此方法。哎,将此方法呢,诶,我们说这叫暴露出去。然后呢,使得。哎,使得。哎,这个是吧,哎在animal。哎,这个类的外部啊,调用此方法,诶对。哎,属性。哎,赋值是吧,哎这个也是使得是吧。
28:03
你这个啊。OK啊,这块大家能理解吧。好,这个能理解了,好那回过来啊,那如果说我们要是在这个内外部呢,我不想让用户获取这个Le的值。其实你也可以把这个方法。当然,你不写就行是吧。去了就行,或者说这块呢,我们把它呢声明成private的。你想想。相当于呢,是不是这个方法对外也不暴露了?哎,那就相当于我们这时候呢,你在外边呢,是不是也没法去钓了。对啊,所以说我们这块呢,演示的这个私有啊,哎,不管能用来修饰这个属性,呃,也可以用来修饰方法啊,这呢就是看我们具体题目的这个需要了。OK啊行这呢,我们就先说到这儿,这是一个具体的例子,哎,那么总结一下啊,刚才呢,提到了说有四种权限了。哎,我们只是演示了叫private还有这个了,那除此之外呢,还有另外的两个,那么到底这四个权限具体有多大呢?
29:02
哎,我们稍微的看一下,哎这呢,咱就对应这个课件了,哎,就看这了。啊,就看到这儿了啊呃,那么这个权限呢,从小到大的顺序呢,就是这样子的。啊,很多同学呢,这个有时候比如说后期咱们到找工作的时候呢,都会有啊,在学校里边会有这个模拟面试是吧?诶会考察一些问题啊,比如说一提到封装性的话呢,毫无疑问就会提到这四种权限修饰了。啊,那顺带着就问一下,说你说说这四种权限修饰的范围的大小,很多同学呢,就把中间这俩呢给整。换了啊,整混了。你看我这是从大到小写的是吧。这不最大嘛,是吧,诶很多同学呢,就把这个中间这两张给整串了哈,就是说了public之后呢,然后就说缺醒了。换过来了,这个你注意啊,这个缺省的话呢,小protect这个大啊。哎,那么具体是什么样的,你看一下这个图。这个private呢,叫私有的。
30:00
撕,有的就是仅限于你这个类的内部才能看得到。啊,这这是最小了,仅限于内部看啊,然后这个缺省或者叫缺省是吧,除了这个类内部能看到之外呢,本包内也能看到。本包咱们讲了pack的概念了。哎,这也能看到。好,然后这个protective的话呢,诶,除了这个缺景之外呢,在其他包中特殊的场景下也能看到,那就得是子类了。呃,这个子类呢,咱们还没有讲继承性哈,所以这块大家可能不熟,哎,但是你先知道啊,这块呢,比这个缺型的要大。OK啊,然后那个public呢,Public的话呢,就是也在其他包,它就不用局限于此类了。所以呢,你在其他班这种非死类当中也能看得到。哎,就是这样的一个场景。所以这个呢叫public,换句话说呢,只要声明成public法,在整个我们这个工程范围内。工程里边不就是不同的包嘛,是吧,其实我们就都能看得到,他的权限呢,是最大的。
31:00
嗯,而这个private的话呢,就体现了它是,诶只要声明成private了,明确的就是内部用。只在内部用是吧类的内部啊。这儿呢,大家需要呢,去记一下啊,哎,刻意的去记一下,然后呢,一会儿呢,咱们去,哎测试一下,让你感受感受这个场景啊。好,这个呢,稍微的去记一下,然后呢,你也可以稍微形象点呢,大家去这样理解哈。然后这画了一个图是吧。嗯,就好比是什么呢?比如说小孩的话呢,一般都会有很多玩具是吧,这个玩具的话呢,都放到这个大的盒子里边了,里边放了很多的这种小玩具,然后呢,比如说有其他这种小朋友过来了啊说呢,诶一块玩吧。这时候你发现的这个小孩一般。就体现这种人性了是吧?这个人性都是啥的呀?嗯。其实我们有时候经常讲说这个人性本善呀,性本恶啊,人天生怎么着呢,其实这些东西啊,现在这个人类社会都已经不单纯了,是吧。
32:01
诶,大家如果想了解人性的话呢,鼓励你看看这个动物世界是吧?啊,那是最原始的这种啊,所以最原始的这个本性呢,就是要生存。哎,这个生存呢,其实体现的就很明显啊,你像我这个。我以前小时候我爱养鸽子啊。我家最多的时候养了40多只鸽子哈,每40多只啊,就都我养的,就是每哪只鸽子是哪哪哪哪家生的是吧,是他的第几代那记得老清楚了啊,里边就有一些情况什么呢,比如这窝鸽子可能有些特殊原因,他就。其中有一个就死了是吧,他那个蛋呢,它就孵,孵蛋都得是两个都得交替着这样孵蛋是吧,然后就把这个蛋呢,因为它孵不了了,那个只剩一只鸽子了,他就不孵了,就不管了,我就把这个蛋呢,放到另外一个窝里边。然后呢,那会儿呢,就是他不知道嘛,是吧,嗯,他有俩蛋,然后再加上这俩他就一块儿去孵啊,有的时候这个俩他要盖不住,我就再再分一分是吧,然后呢,但是他自己的蛋跟这个蛋呢,他时间肯定不一样嘛。
33:03
是吧,比如二十来天它就出来了,出来以后呢,假设你放在这,我放进去的这个枣还有两天就出来,那个可能是七八天,最后呢,你会发现七八天以后你再去看,按说是都活着呢。但是其实你会发现呢,后出生的那个呢,就死掉了。因为呢,这个鸽子它都会跟这个母亲去抢食嘛,是吧,抢食的时候呢,就是谁本事大那谁就抢,你发现呢,那个出生的早的他就撞嘛,他就始终让那个小的就抢不着,那这个大个子呢,他不懂这个是吧,所以呢,几天下来之后,你发现那个小的就饿死了。就是生物的本性是吧?对,这种体现的淋漓尽致啊,其实你有时候看小孩也是一样啊,111饿了就哭闹,是小孩就爱哭闹,因为他要生存啊。哎,这个咱们说另外一个事儿哈,这个这个小孩的话呢,你比如过来他这有一盒的这个玩具哈,诶你就说你发现这个小孩呢,就体验这种自私性了,他要觉得这个玩具呢,特别好玩啊,他特别喜欢,他就不会让别人玩。呃,让别人玩的都是那个,他玩腻的是吧。对,所以这块呢,你比如说来了一个小孩说让他玩,诶对于这个小孩来讲呢,这个东西呢,比如说就是一个类了,然后这个类里边呢,有一些东西呢,他觉得只有我自己能玩,诶你可以想象呢,就是他了private了。
34:10
诶只有他自己能够去玩了,自己能看得见的,对外界来讲呢,给他隐藏了啊,而这些呢,这个呃,你随便玩是吧,或者这块我们可以看到呢,就是又分的很细是诶说这一波呢,你这个可以玩,这一波呢,他就分成他不同的朋友的等级是吧?诶然后不同的人可以去玩,最后的这些呢,就是自己也不想要了,是你爱玩玩是吧,随便都可以玩帕布里克拉。哎,去对外开放了是吧,哎,你可以这样的去想啊。好哎,就有点像这个盒子里边,给这个盒子里边这个东西呢,我们加不同的这种标签,然后体现什么呢?诶你作为一个外来者,你诶往里边去看的时候呢,有的你能看得到,有的你看不到。啊,那体现为就是我们再去调用这些结构的时候呢,它的可见性的大小。啊,其实呢,回过来咱们在这个位置。
35:00
诶,我把这个给大家打开是吧。他这块不是报错了吗。这块他说的说你这个X呢,它是一个私有的一个访问,所以呢不让用,所以就报错了。那在这个这个呢,实际上是我们这个idea,它的这个编译器报的这个错误信息,在以前的这个eclipse当中哈。在这个eclipse当中呢,他这块写的,说你这个like呢,它是呃,Invisible的。呃,Visible就是可见的是吧,Invisible就是不可见的,E呢,就是这个权限不够,看不到。哎,所以这块呢,大家你去体会一下我这里写的这句话哈。啊,如果要是面试问你。说如何体现封装性呢?如何体现封装性呢?这样说哈,说Java呢,规定了四种权限修饰啊,分别是啊1234。啊,然后呢,我们可以用这四种权限呢,去修饰类及类的内部成员。然后体现的这些成员在被调用的时候呢,可见性的大小。
36:01
所谓的可见性,那就是说诶能看得见,能调,那就点能可见的,你要看不见了,那就不可调的,就是隐藏的。哎,就是把这两句话呢,说出来,就是极其精准的表达出来了,封装性的一个理解。呃,然后呢,这块呢,注意只是咱们讲的封装性的一个例子啊。很多同学一说到什么是封装性呢?上来就说我们把属性私有化,然后呢,提供公共的概率的方法,注意,它不等同于封装性。它只是封装性的一个举例而已。啊就跟说呢,诶说这个这个比如说啊说这个姚亮,姚亮是一个好人是吧。可能是女朋友说的,可能是别人说的是吧?诶为什么说她是个好人呢?诶说呢,他呢,这个扶那个老奶奶得过马路了是吧?说她是个好人,这呢,只是他是一个好人的体现之一是吧?对呃,他呢是个好人,他有好多方面的体现的啊,所以你不能把他俩划到等号啊,这个不能跟这儿画等号。
37:01
OK啊好,那么呃,具体刚才我们说的这四种权限呢,这个大家要记住它啊,这个咱们就直接叫建课件了啊。啊课件啊,这个课件里边我们有这呃,具体的这样的个权限的一个使用范围啊,这是其中一个点,然后另外一个呢,我们要再强调一下,你看我这块我写的哈,说这里边呢,诶我们说呢,可以用他们四个呢,去修饰类和类的内部成员,那我们现在说一下这个。累啊,说呢,这四种都可以用来修饰类吗?呃,其实不够准确。啊,这里边儿呢,我们提到这个类呢。啊,其实呢,咱们还没有讲内部类啊,现在咱们见到类呢,其实都算是外部类了啊呃,那么这个类的话呢,我们说呢,只能使用。对,一个呢叫做public,一个呢叫做缺省。啊,去修饰。那么对于这个类的内部成员。
38:00
他们呢,是可以使用哎四种哎权限修饰进行修饰的啊。啊,权限修饰这个我就别加符了,因为毕竟有一个没有符,其实是吧。啊,这个你就算四种权限修饰啊,来进行这个呃修饰。哎,那么这儿呢,你可能会问为啥呢,是吧?哎,咱们先回过来看一下啊,在这个animal test点这个文件里边,这个类呢,我们就用的是缺的。啊,叫缺省的也行啊,然后这个类呢,就是public的了。你说我们现在有一个类,诶我这样写的啊,来了一个啊叫哎,可class叫AA了。这个类呢,加了一个。诶。不行是吧。你觉得咋解释啊?谁也掉不了是吧。啊,这个我们说private修饰的结构呢,叫类的内部,可见它就是类是吧。那你说他对他自己可见外边也用不了,反正是是吧。
39:02
这没有用了,咱们指的是你在类内部,可见你就是类,你修饰它有啥意义呢是吧。那也是就是修饰那个属,比如属个类,那个方法类那个类主。你自己家呢?没有什么意义啊。说白了就没有用。诶,所以呢,我们就哎不要去加了,哎这个大家注意一下啊,当然了,这里边儿这个类呢,咱们指的就是外部类啊。就是咱们现在写的这种,就是这是一个类。诶,跟上边这个类,这俩是并列关系的,这都叫外部类,你要在这个类里边呢,再去写类,那叫内部类的,内部类可以被四种权限修饰,那个咱们最后再去讲。啊,讲第一条主线的时候呢,不是最后讲累不累嘛,到时候再说啊。好,这个呢,就是我们说的这样的一个情况了,然后下边一个说开发当中四种权限使用的一个频率情况是什么样的呢。哎,对,使用频率比较高的啊。
40:02
哎,对,一个呢叫public啊,一个呢叫做哎private了。啊,这两个大家最熟悉啊,因为呢,我们使用频率最高是吧?哎,这个比较低了。啊,缺锌是吧。还有呢,我这个坡。啊,应该说呢,咱们自己写代码的时候,基本上不会去用这个protected。这个我们要看底层的一些源码的时候,他会用,因为呢,底层的这些API呢,呃,应该是要被我们来调的,他为了防止我们。瞎整是吧,哎,所以它会设置的呢,非常的清晰是吧,呃,小的中的呃,再大一点的最大的,它会设置的非常的严谨,咱们要写的话呢,咱就是要么你就私有。要么你就。了。咱们就很少去用缺陷和protect。那为啥咱就不用了。
41:01
没必要了是吧。甚至咱们夸张点说,你说我这有一个属性,我写成public了,但是呢,我就把它看作是私有的,我也从来不去主动调它。好像也行是吧。但是呢,呃,底层源码就不能这样弄,底层源码说呢这个呢,不让外边用,结果他自己写成public了,真的有人是不是就故意的我去用它是吧。哎,咱自己写的话,你知道你自己写的,你自己控制好就行。但稍微的分一分吧,所以我们这两个用的多,这个的话呢,Protecting你就没必要了啊。哎,我们就不整那么细了,所以呢,频率高频率低啊,知道怎么回事啊。好这个就完了,然后下边这样叫封装性的体现,哎,其实咱们刚才呢,讲的上面这个案例啊,就是一种体现。这种体现呢,我把它归结成我们的其中的一个场景啊。诶,这个场景一怎么着呢,哎,就是私有化。哎,类的属性。然后呢?
42:00
提供公共的。哎,我们叫get和set方法。哎,对此属性进行获取。哎,或修改。或者叫设置也行。哎,这里边儿这个私有化啊,这是我们用的叫。是吧,来提供公共的。Public。没问题吧?好,这是呢,这个场景一啊,哎,那么再举一个例子,场景二。诶场件二啊,场件二的话呢,就是如果我们这个类当中有一些方法不需要对外公布的话,我们也可以把这个方法是不是成成私有的。哎,将啊类中不需要对外暴露的这个方法来设置为private。哎,即可。啊即可啊,举个例子啊,大家呢可以,嗯,我可以举两个例子啊,第一个的话呢,就是咱们当时写这个。前面这个项目一的时候。
43:01
咱们这个项目一,诶给了一个现成的叫utility。哎,这个有呢,是不是咱们当时说啊,你可以从键盘获取1234标了一个方法,这是public的,可以呢,取你收入支出的金额public的。你这个收入支出的说明public这个或是你要出或者n public的账。哎,这呢,你看有个private的方法。这个方法呢,就是专门用来从键盘来获取值的,就是里边呢蕴含了就是scanner的一个使用了。诶,但是这个SKY这个使用呢,这个方法呢,我加上private了。然后呢,我就不对外暴露了。哎,所以呢,你要调你就调上面这方法它呢就不要调了,诶那他既然不对外暴露了,他一定是不是内部要用啊。哎,他在上面这个方法里边,你看这不全用了吗。哎,这呢,就是我们说的这样的一个场景。啊,私有的方法啊。好,这是一个例子,然后另外例子呢,就是咱们嗯,写的这个,呃,关于我们去抽取关于传递这块啊。
44:08
哎,直传力,直传力这块呢,我们写了一个案例啊,就迈瑞这块,呃,最后呢,我们提到说可以升序可以降序。诶在这儿是吧,然后这里边儿呢,提到了交换这个两个变量位置的这样一个方法,这个方法的话呢,诶我们也不想对外暴露了。那我就可以把它呢,生明成是叫。Private。哎,我这样加一下,哎,加完之后的话呢,就是你想排序,你要上面这个方法呢,我内部用的啊,诶你就不要。掉了。哎,就是这样的一种暗示,那我们看到一些源码的时候呢,你要看到这样的一个声明了,你就知道这个方法,你就别调了,它内部用。OK啊行,那第二个咱们自己写的话呢,可能有时候不会想那么细了是吧。哎,你注意一下这个,哎,它也是一种场景啊。好,最后一种场景。其实这个场景很多啊,咱们只是暂时呢,给大家呢,先举这样的几个。
45:02
诶,这个场景三,诶,咱们在后边讲完这个代这个关键字以后啊,会讲一种叫单利模式哈。呃,单利模式是一种设计模式,哎,单利模式。哎,中。啊,这个构造器呢,咱们就声明成private了。避免在类的外部。哎,创建实例。这个事儿呢,大家现在还不懂是吧,这个我们放到。哎,咱们放到这个static,哎,关键字啊后啊讲。单列模式中的那构造器私有了,那构造器呢,我们一会儿呢去讲这个构造器的事儿。啊,构造器的作用呢,是用来造对象的哈,那私有了,那不就意味着就是避免在内的外部去用它是吧?哎,避免它用它干嘛呢?用来造对象的。好,那么呃,如果面试的时候提到封装性呢,说什么叫封装性这个呢,你就说这两句话。
46:01
啊,那怎么体现封装性呢?你可以举三个场景。啊,那大家的理解呢,就是到位的了。OK,那么关于封装性的咱们就说完了啊,好,大家休息一下。
我来说两句