00:00
接下来我们要介绍的就是面向对象里的核心特性了,我们都知道面向对象三大特性,封装、继承和多肽,那所以接下来我们首先来介绍一下封装,那封装呢,就是把抽象出的数据和对于数据的操作要封装在一起,这样的话数据就被保护在了内部,我们程序的其他部分呢,不能直接访问到这样的数据,而只能通过被授权的那些操作,就是成员的一些方法才能够对这个数据进行访问和操作啊。那所以具体在Java里边封装操作啊,一般我们就是要符合抓并规范是怎么样的一个步骤呢?呃,就是首先我们对于属性要做一个私有化。然后接下来呢,提供公共的public的get set方法,然后去获取属性的值,然后对于属性去进行赋值操作,这就是Java里边的封装,那SKY里边呢,其实是借鉴了Java里边这种思想啊,基本上底层的实现是差不多的,那只不过呢,就是考虑到Java的这种实现太过于冗余,太过于麻烦了,因为大家都有这样的一个经验啊,尽管现在呃,很多这个IDE里边,像idea里边,我们都有快捷键,可以直接自动生成相关的这些代码,但是呢,整体来看代码还是太冗长了,有好多这个感觉好像没必要的代码啊啊,那所以对于skyla而言,他直接把这些东西都不用我们实现了,全部在底层做了封装,所以即使是scla里边的public属性,就它的这些公有属性,其实底层也是private的。
01:44
那我们外部直接访问这个属性的时候,看似是直接点这个属性访问到了它,其实呢,还是调用的公有的给我们包装好的那些get set方法去做的访问啊,所以这这一部分就我们完全不用再去做对应的实现了,那呃,一般就是不推荐大家再去对于属性啊,设置成private,然后再手动实现,这样就相当于变成了一个冗余嘛,没有必要,但是呢,呃,因为很多Java框架它是要利用反射去调用这样的一些get set方法的,所以有时候呢,为了跟这些框架兼容,那还是即使skyla里边的这个public属性,我们知道底层有这样的方法,但是呢,呃,这个Java框架它是要显示的去调用这个方法的,那我们可能还需要再去做一个实现,那当然了,也有更加简洁的方法,就是通过SC提供的at并property这样一个注解。呃,这样就直接可以快速的实。
02:44
见了,所以大家看到这也是SC拉里的一个基本的设计思路,就是尽量让我们把那些Java里边比较冗余的,没有必要的那些东西全部删掉,全部让底层帮我们搞定,我们只要专注于业务逻辑、代码逻辑就可以了。
03:02
啊,那接下来我们就来考察一下访问权限啊,那我们已经看到啊,所谓的这个封装,它关键就是跟属性的这个访问权限相关,接下来我们看一下访问权限SC当中跟Java又有哪些不同,我们回忆一下Java当中的访问权限呢,主要有这样的四种,就是public private,还有protected,另外还有就是默认啊,那默认大家知道其实就是包访问权限啊,那这里其实稍微我们会发现有一点奇怪啊,就是对于这一个默认的这个包访问权限,看起来好像跟其他几种有点不太一致,对吧?哎,那所以呢,在scda里边对于这个访问权限是做了一些微小的调整的,那实际上跟Java也是类似,Java里边的这些访权限在SKY拉当中其实都可以得到同样的效果,那我们来具体看一下啊,首先是public public的话,在scda当中,我们前面说了属性和方法如。
04:03
如果前面什么修饰符都不加,那默认它就是public,但是大家要注意,你不能把它显示的定义成public,因为SKY里面根本就没有public这样一个关键字。啊,这是大家需要注意的一点,然后接下来呢是private private我们知道是私有访问权限,在Java里边,那如果用private修饰的属性,就只能在当前类的内部去做访问啊,那这里大家需要注意一下,在skyla里边呢,除了类的内部之外,还有一个地方可以访问,就是伴生对象。之前我们提到过,所谓的伴生对象是跟当前这个类相同的名称,在同一个文件里边相伴相生的一个对象,这个对象呢,它里边的所有属性和方法跟类里边的属性和方法都是相通的,他们彼此之间都能访问自己的私有成员啊,所以当前这个skyla里边的private权限就相当于是在类的内部和伴生对象里边都是可用的。
05:03
接下来下一个是protected,这是受保护的权限,那大家要注意的是Java里边呢,受保护的权限protected,那是相同的类,还有它的子类,另外还有相同包里边所有的内容啊都可以访问protected的这个属性,那么对于SKY而言呢,保护受保护权限就更加的严格了,只有同类和子类里边可以访问,同胞不能访问啊,因为之前抓va这个定义也是有点奇怪,对吧,就是把这个包的访问权限跟这一个子这个带继承关系的子类的这个权限好像混在一起了,这个容易产生混淆的,所以skyla把这个完全区分开了,Protected就只有同类和子类,那对应的这个包访问权限又怎么样去定义呢?在skyla里边包访问权限是private关键字,再加上一个中括号,里边给出包名,用这样的方式来实现。
06:02
这表示的就是只针对当前的这个包,里边的所有的类可以访问当前的这个属性。啊,那这就是scla当中的访问权限的定义,那接下来我们就在代码里边做一个具体的测试。那首先我们还是定义一个SC的object test04,接下来我们主要是要测试。Access访问权限啊,那当然这个关于访问权限呢,我们发现还有这个子类的这种访问权限,对吧,涉及到这样的一个关系啊,所以说这里边我们需要有一个继承关系的定义,那我们另外再专门。因为大家想到,如果说我在同一个文件里边去定义的话,那即使是有这个子类的继承的这个关系,我们可能也会有所疑惑,所以我们专门把它定义在两个文件里边,所以除了这个TEST04ACCESS之外,我们再去定义一个object test,我们还是叫TEST04,是同一个,呃,同一个目的啊,同一个测试,现在呢,我们是专门定义一个这个plus for access,也就是说专门定一些这些有继承关系的类啊,啊放在这里,那首先我们来看,呃,我们要定义这个继承关系的话,那干脆先定义一个父类吧,我们的这一个object大家看到没有什么作用,对吧,我只是想在这里边专门定义一个副类,那这个类,呃,如果要是跟student相关,或者跟其他的一些类型相关的话,我们。
07:47
干脆就定义一个person吧,Person类plus person里边是类体啊,那在这个person里边我们就可以定义各种各样啊不同的访问权限,然后接下来我们来做一个测试。
08:02
首先就是这个私有的访问权限,Private,若定一个ID card,一个人嘛,能有这个身份证身证号,定义一个string,或者定义一个整形也行啊,但是一般情况这个身份证号可能呃,不像一个整形数啊,我们随便给一个号,然后接下来我们再定义一个protected受保护的属性name还是一个string啊,默认给一个值,我们干脆还是叫爱丽丝吧,然后再接下来我们应该还有就是比较常见的。直接就是public的这样的一个属性都可以访问的啊,Sex给一个string啊,最后呢,我们这里边再给一个。访问权限的一个属性来看到访问权限的话,那是一个private,然后后边这一个中括号方说我要求只有在406当前的这个包下边能够去做一个访问,那可以直接在这儿把它这个声明出来,然后接下来。
09:15
Age定义一个年龄,不是直接给一个18啊,大家看这样就把它拟好了啊,当然了,如果说我们想要看到它所有的信息,所有的内容的话,里边既然有private,那在外部就访问不到了,哎,那怎么办呢?那一般情况我们可能会提供一个public的一个方法,对吧?比方说我们一个print infer这样一个方法。做一个信息的打印输出里边的话,那这里边就直接print line还是做一个呃模板字符串啊,做一个字符串插值,我们这里边直接写一个person,后边呢,就是当前的Dollar I。
10:05
Card啊,我们这个card的前面拼写有一个错误啊,把这个改过来,然后后边是当前name,然后再加上de以及H,就是一个基本的父类的定义,然后接下来我们就看access里边到底要做什么样的操作,哎,那这里边既然是有一个父类嘛,接下来我们其实还是要有一个子类的啊。义一个字啊,那当然大家也可以直接还是定义这个student student呢,之前我们已经有过了,那现在应该还是要有所区别啊,我干脆定义一个别的吧,比方说我定义一个worker worker也是人嘛,所以要继承person类,那在SKY里面的继承怎么写呢?这里边提一句,跟Java里边一样啊,Extend就这样去写person里边啊,那大家就会想到了,在这个里边,自然前面我们定义在person类里边的所有属性应该是可以继承的,但是大家要注意啊,那显然这里边这个ID card会有问题对吧?呃,所以这里边我们可以看一下,比方说我们想要访问这个父类里边的ID card肯定是看不到的,但是如果要是想访问附类里边的name的话,这个是可以看到的,所以接下来我干脆直接重写一下,Override一下这个。
11:37
In方法。我们来把它做一个实现,这个里边啊,首先我们可以直接print line是worker,然后接下来我们会发现,如果想要去printline当前的ID car的话,这个是做不到的,因为我们知道自有的属性只能在自己当前的内内部,或者我们说的,呃,所谓的这个伴生对象里边可以访问,子类里边也是不能访问的,哎,但是别的属性呢,是可以访问到的,前我们这个别的属性都定义的是ver,是可以更改的,接下来我们可以做一些操作,把它做一些访问和修改,比方说当前的name可以拿到当前是,然后接下来比方说这个配置可直接给一个,比方说25,然后S重新定义成。
12:45
诶都是没有问题的,但是这个ID card访问这是我们能看到的啊,啊,那最后你可以直接把这个print line啊。啊,这样我们还是直接就用之前的这一个print line,把它做一个打印就可以了,这里我们改成博,当然这里就能访问到ID card了,能把name sex和age做一个输出,就是当前这个子类里边,我们能看到能够访问它附类的哪些属性好,然后接下来呢,我们可以在这个测试的object里边把main方法写出来,然后哎,就可以去创建一个person的一个对象了,创建对象我们直接就把这个叫做person吧,知道它的类型肯定就是person,又一个person出来,然后接下来如果说我这里边想要直接去在外部,我们现在是在另外的一个object里边,对吧,这里边如果对于当前的这一个。
13:57
想想要去访问它的属性的话,我们会看到ID card的肯定访问不到啊,这是没有问题的,自由属性无法访问,但是别的属性可以访问到,刚在我们其实也看到了啊,这时候如果我要去line的话,目前person点来看,一和X是可以访问到这里大家看到了,那为什么当前的name也访问不到呢?当然就是这里边的protected对吧?我们说protected受保护访问权限只能在当前类以及子类里边能够访问到,现在我们已经到了外部了,所以如果要想访问person内也是error,哎,类和子类的外部啊,Selected不保护权限访问不到,那当然了,这里边我们的age呢?
14:56
它本身是一个包访问权限,现在我们同样也是在当前这个CHAPTER06包下边自然是可以访问到的,这是没有问题的啊,那对应的sex是一个布的权限,呃,Public权限的属性当然也是可以直接访问到的,哎,这就是大家能看到这个过程啊啊,那对应的我们当然也可以直接调用当前person的infer这个方法,也可以做一个打印输出,我们可以运行一下看到当前的结果。
15:28
大家看当前的AGE18FEMALE,然后当前person所有的信息都可以看得到啊,那另外呢,如果我们要是创建一个worker。它的类型当然是worker了,又一个worker出来,接下来我们如果要是调用worker而create infer的话,应该就看到的是更改之后的op相关的这些参数了啊。所以这就是关于。当前类的这个和对象的访问权限这一部分内容。
我来说两句