00:00
大家好,我是海波老师,接下来我们来讲一讲Java面向对象语法中的访问权限,我们这里来拷贝一下,我们写上一个我们的17啊,把这个呢,我们改成叫access啊,我们点击OK,然后呢,把里面的东西啊,咱们全都删掉,把这些呢,咱们全都给它去掉就可以了,那么这里呢,我们去掉啊,我们写上它叫访问权限,在之前的学习中,你会发现我们很多的类和方法,包括属性,在声明的时候,其实我们都刻意的忽略了一个我们的关键字,或者叫修饰符,就是这个public。我们都没有写,比方说我写个方法,我叫static对吧,我叫word叫test,诶我们这么写就行了,然后呢,在下面呢,我们写个类的时候,我们写上一个test,好在里面我们写上一个string,我们写上一个name,我们这里都没有提到这个public,那这是为什么呢?因为啊,这个public就是我们所谓的访问权限修饰符,所以咱们这里写上咱们的public,它翻译过来呢,叫公共的。他就是访问权限修饰服务。
01:00
我们没有讲,所以呢,我们之前都刻意的把它跳过去了,但是我们现在呢,就准备给大家去讲一讲啊,把这个放回去,那什么叫访问权限呢?简单的解释就是访问的权利和限制。访问什么呀,访问咱们的类啊,访问咱们的属性啊,访问咱们的方法呀,这不就叫访问吗?那么权利和限制是什么意思呢?其实就是能不能用的意思,也就意味着我加一个public,这就表示我们当前的这个类在任何地方都能用,为什么呢?它是公共的意思,在什么样都能用,哎,老师呀,那咱们之前写了一个叫做class,我们写上一个叫U,我写个17,对吧,我这么写,写完了以后,那我这能不能加我们的public呢?好,你试一试,我们拷贝,拷贝以后我们放过来回车。回车以后你会发现这个地方是不行的,哎,老师你不说了吗?我们的PA是个访问权限,那么它表示公共的,不就是哪都能用的意思吗?那怎么这还不行呢?这里给大家解释一下,这个是一种特殊的语法,Java的源码中,我们公共类它只能有一个,而且。
02:08
必须和源码文件名相同,大家有没有发现我们当前的这个名字叫JAVA17OBJECT叫access,我们当前这个名字它也得叫这个名字,如果你不叫就不行,举个例子啊,我把它改成叫叉叉,叉叉,我把这个去掉,你去掉以后你会发现我们这就报错了。为什么会报错,就是因为你源码的名字跟我当前的这个公共类的名字是不相同的,诶老师,那我把这个公共去掉呢,你去掉以后你就会发现这个就没事了,但你只要写上一个,你这就不行了,同学们能不能明白老师说的意思,所以啊,我这里要改回去,我叫JAVA17,然后呢,我们的object再写上一个叫access。好了,你这么写就可以了,所以啊,咱们再说一遍,Java中的源码中公共类只能有一个,你可以写很多的类啊,但是公共类只能有一个,而且呢,必须和源码文件相同,同学们现在这个能不能明白?好了,说到这里以后,我们再给大家说另外一个东西,什么呢?就是这个闷方法。
03:10
为什么要提到焖方法呢?因为焖方法也有这个public的防护权限嘛,同学们对不对?所以咱们回来咱们说一下这个闷方法。问,方法呀,它的访问权限也是公共的,诶老师,那如果没有公共呢?记住,如果没有公共的话,你把它去掉,去掉以后你会发现左边的那个绿色的箭头就没了,说明你当前的类根本就不能执行,同学们,这个能不能明白,也就意味着你必须把公共的防护权限给我加上,你不加就运行不了。那这个是为什么呢?很简单,因为啊,我们的问方法它是什么呢?问方法是由Java虚拟机调用的,那么大家想想,那么我们Java虚拟机调用时。可以任意调用。而不用考虑权限,而不用考虑权限问题。
04:02
你想想吧,我加入虚拟机想执行这个方法,还得需要这个权限,那个权限,那你这多费劲对不对?所以我们什么都不用考虑,就直接能用就行了,对不对?这就是我们为什么加public的原因。还有一个同学们还记得咱们之前讲过一个静态吗?咱们叫做static,对不对?Sta什么意思?代这个是一个我们的静态语法,跟当前的类有关系,诶老师呀,那这个静态我不加怎么样,诶你把它去掉,你去掉以后就会发现那个绿色的箭头是不是也就没有了。为什么没有了?很简单,因为他没有办法执行了,诶老师呢,这又是为什么呢?你刚才呀,加个访问权限,我倒是明能明白呀,为什么那个static把它去掉以后,这也不能跑了呢?是因为如果你不加static的话,这个main方法就是一个成员方法吧,那么成员方法你是不是要构建对象啊?你能确定这个对象你该怎么构建吗?万一你有参数怎么办?我们的Java虚机哪知道这个参数你要传什么呢?他都不知道对不对,所以啊,从这个角度来讲的话,这个main方法我应该在任意的时候以任意的方式来调用它,而不应该有任何的限制,所以说他通过类名就应该能够直接访问,所以说它加了一个static,这个大家能不能明白,还有一个就是了,对吧,任意的地方,任意的方式我应该都可以使用,这是我们需要注意的。
05:26
好了,同学们,我们这个public这个权限呢,就给大家说到这里,诶老师呀,那除了公共的权限以外,还有没有别的权限呢?这里给大家解释一下,我们Java当中访问权限主要分四种。我们说一下图,图Java中。的访问权限,它主要分为我们的四种,诶哪四种呢?这里我们需要给大家说一下,首先我们的第一种咱们就写上一个叫。啥意思啊,同学们,什么叫private私有的,这一咱们写上私有的,它的访问权限非常的低呀,什么叫私有啊,就是自己的嘛,我自己的东西我自己用,诶同学们,我们来写上一下,比方说我写上一个class,我写上一个叫U17,好,放过来,放过来以后,我现在写上一个属性叫string name好了,我把这个pro呢,我放过来,诶就是这意思。
06:22
你放过来以后,同学们注意了,这个属性只有他自己能用,别人想用用不了,所以呢,我们说一下叫做同类。就是同一个类中。可以使用。就是这意思,在这个类当中你可以用它,在别的地方你用不了,咱们举个例子吧,来我这里写上一个,咱们叫做word,我写个test好了,写完之后呢,我们去打印这个name,没有任何的问题,对吧?这个name呢,说的就是它,但是大家看一下,我叫U17,我写上一个叫它等于new,咱们叫U的17好了,写完了之后,我U的点name,你会发现我根本就访问不到,为什么?
07:03
这个属性不是说没有,而是不让你访问,这个呢,就叫石有的,诶很奇怪,老师,我声明一个类,一个属性,一个方法,我直接用不就行了吗?为什么我们这里还要给他限制住呢?对吧?为什么还要私有的,只要你自己能用呢?这个呀,大家想想咱们面向对象的分析方式,它可是贴合生活的分析方式呀,生活中别人的东西你能随便拿吗?你不能吧,除非你们都有点什么关系,对不对?那比如啊,你们有亲戚关系对吧,朋友关系之类的,那如果是陌生人的东西,你直接拿是不是就叫抢了呀?所以啊,咱们Java也是一样的,对吧,他就体现了这种关系,就像我们刚才说的这个私有的一样,有些东西你再好的朋友你可能都不会给别人,对不对?哎,有些私密的东西就是自己的,只有自己才知道,比方说银行卡密码啊,或者什么支付密码啊,是不是都是我们自己才知道啊,你在亲的人是不可能都不告诉他们呀,你不让别人访问,这不就是一种限制的感觉嘛,对不对?好了,这是我们给大家讲的第一个访问权限啊,刚才的public。
08:04
我们的第二种啊,来咱们说一下咱们的第二种,但是呢,我不写个二,我写个四,我写个public。咱们叫公共的,所以啊这里叫啊,任意使用,什么地方没有任何的限制,你想用就用无所谓,所以呢,大家看一下,我这里再来一个,我叫public。诶,我写上它,我们叫做string,我们就写上叫user nameme好了,你写完以后,你在它自己里面肯定是能用的,所以来拷贝,拷贝以后你会发现我的前面加了一个访问权限public之后这用没问题,那你这用呢,我们来看一看,我们点一下叫user name,你看也没问题,诶所以啊,任意的地方都可以使用啊,好了,我们现在接着往下写,我现在写第三个,但是我写第三个呢,我是在它的下面写,所以这里面就写成一个二了。这个是什么权限呢?我们给它去掉,然后呢,我们加上一个小括号,然后写上一个default。诶,这是什么意思啊,老师,很简单,叫默认权限,诶说一下咱们叫做默认权限,什么叫默认权限呀,就是说你不设定权限,我们Java虚拟机默认给他一个权限,就是当。
09:12
不设定任何权限时。Java虚拟机会默认提供权限。但这个权限呢,我们称之为叫包权限。大家还记得吗?我们之前讲那个叫import语法,大家还记得吧,咱们那个import语法就是我们的这个语法当中,我们说过了,如果你当前的类不在Java点浪包里的话,你是需要引泡吧,但是还有种特例,就是如果是同一个包下的那个类也不需要引泡的,咱们讲过吧,对不对?所以呢,我们对包其实是有相应的权限的,而我们当前的这个default,它恰恰就是一个包访问权限,也就意味着同一个包里面你随便用,诶,就是这个道理,那好了,咱们给大家看一看,记住啊,同学们,我现在再来写上一个叫做string,我们的性别,好,我这么写。
10:05
同学们,我这么写完以后,你要记住了,我当前的这个就没有加任何的权限,那么这个时候我们的加入虚拟机就会给他提供一个权限,我们就称之为叫default,记住啊,这个default不是说我要加东西我不加,但是它确实有这么个权限,诶老师,那现在我怎么理解它呢?非常简单呢,我在这个地方我们写上一个U的点性别,诶同学们有没有发现我们这么写其实是完全可以的,对吧,为什么?因为这个类和咱们这个类不是在同一个包下面吗?所以呢,它是可以访问的,好,我们别的地方咱们验证一下,我这里呢,打开这个零三打开打开以后里面没有什么代码吧,现在我直接写了,因为我刚才啊,这边有一个叫U17啊,所以我拷贝一下。拷贝以后大家看一下,我写上U的17,然后呢,我写上叫U的,它等于new u17,好了,写完了之后大家看一下U的点我们当前的,诶没问题呀。
11:04
我在这儿也能访问呢,为什么?因为我当前的这个类也是在这个包下面的,我当前的这个U的17它也是在这个它下面的,所以都没问题,诶老师,那如果不在同一个包下面呢,比方说我们当前的这个CHAPTER03,我们打开,打开以后我在这个里面我随便找一个打开。打开以后我写上一个叫U的17,同学们记住了,肯定可以找到的,为什么呢?就是包名不一样嘛,所以我写上叫new u的17,好了,写完了以后,我们这里给它import一下,我快捷键叫alt回车。然后呢,Import import以后大家会发现我们当前的这个叫U时期没有问题吧,同学们,诶老师啊,你的这样怎么会发生错误呢?发生错误的原因就在于我们刚才的那个类,它不是公共的,懂我的意思吗?同学们,所以啊,我如果这么写的话还不行怎么办,我改一改把我的程序啊,我改改我把这个类呢,我用一下怎么办呢?我把咱们的这个性别把他们三个吧,咱们都拷贝过来。
12:05
拷贝过来以后我放到这里。这三个属性呢,一个是私有的,一个是公共的,一个是包访问权限,那好了,我把这个类拷贝一下,拷贝到这里呢,把它换成我们的它,诶把它替换一下,替换以后我写成它叫user的点,首先同学们user name是可以访问的,为什么?因为user name大家还记得吗?它是公共的呀,所以公共的肯定没问题,但是呢,我们再来干嘛呀,我写上它,我把这个name的我拷贝过来。拷贝过来以后,你会发现这就不行的,为什么,因为它是私有的,所谓的私有呢,就只有他自己在这个大括号里面能用,就是这个意思,好还有呢,我们的性别,这个性别呢,我们来咱们操作一下。咱们叫性别,这个性别你会发现也不能用,为什么不能用,因为你叫TRA03,而它叫TRA04,你看那可不就不能用吗?这个大家能不能明白,我相信只要演示这个效果,你们就知道它到底什么个权限了,所以把这个我们给它注掉就可以了啊好了,注掉以后呢,我们回到这边来,我们再说一下,我们除了刚才的不同包的话,还有一个什么呢?我们叫做纸包啊,这边有个叫child的package,还记得吧,所以呢,纸包能不能用呢?所以我们打开,打开以后点开,然后呢,把刚才的咱们复制过来,所以呢,我们回去把刚才的代码原封不动,咱们拷贝一下。
13:33
拷贝以后咱们拿过来放到我们的这里来,放过来把这个呢给它打开,打开以后大家会发现我们的name还是不能用,对吧,私有的吗?那这个呢叫性别,它也不能用,为什么不能用,诶老师呀,我当前的这个包不是他的子包吗?所以啊,这个包权限跟父子关系无关,所以呢,这个包权限呢,应该叫做我们的路径权限,所以呢,我们写上它,我们称之为叫做路径权限。
14:01
懂我的意思吗?同学们,就是相同的包路径就能访问你的这个子包啊,它就多了一层路径,它就不允许访问了,所以咱们把这个程序呢,给它注掉啊,好,那我们这边也给大家说一下就可以了啊,这是我们的默认权限,好,我们再写上我们的三。第三个是什么呢?叫protected,叫protected权限,这个是什么意思呢?这个英文单词翻译过来呢,叫受保护的。受保护的权限。诶,什么叫受保护的呀,生活当中咱们一般孩子出了问题的话,我们的父母是不是都要保护他一下,所以我们这里的protected呀,他是什么呢?叫类可以访问。同学们,父亲保护咱们的孩子,那是不是就是把东西让他去用,不让别的孩子用啊,对不对?一种保护的感觉在里面啊,为什么我们这里写了一个1234,这什么意思啊?给大家解释一下,是因为我们的访问权限啊,我们分四种,但是它的权限是有范围的,就意味着我的范围越小,它的权限越低啊,我们的pro它只能自己使用,它的权限是很低的,而我们的默认呢,就要比它的权限高一些,就意味着比它的范围广一些,你像我们当前的pro只能自己用,而这个呢,是自己能用它的那个同一个包路径它也能用,对吧?
15:19
而我的protected,它同类肯定能用啊,它的同一个包路径也能用,而且它的子类也可以使用,记住啊,这个子类同不同包都无所谓,你不同包也能用,你同包也能用,而我的public它的这个范围就更大了,对不对?任何地方都可以使用。好了,同学们,这里就是我们的访问权限了,来咱们把这个protected咱们演示一下,来我这里呢,在咱们这儿我添加一个叫protected叫int,我叫age年龄,那么首先我自己肯定能用嘛,所以我打印一下,咱们就叫做age就可以了,那我写完了以后,那么我们同胞当中的类我来试一试,所以呢,我这里写上它,来我们写上咱们叫做U的点A,诶没有任何的问题,那不同包呢,对不对,那不同包我们找一下,这不就是不同包吗?那不同包把这个打开。
16:11
打开以后来我们写上一个它,我们叫做A,你会发现不行的,为什么不行,因为不在一个包里,对不对,诶好了,那我刚才说过了,父子类呢,那我现在干嘛呢?我们在这里写上一个他,咱们叫class,我们叫做child的时期。然后呢,我去继承咱们当前的类,咱们继承我叫U17,我这么写,写完了以后,同学们,我们写上一个叫what叫test好了,写完以后我们打印一下,你会发现我们的age是可以使用的,这个没有任何的问题,对不对,诶,所以啊,我们当前的这些地方不让你用,但是有些地方就可以使用了啊。所以呢,这就是我们的四种访问权限啊,这个同学们下来呢,自己试一试,我们以后再写代码的时候,我们尽量呢,就要把权限给它加进去了,好吧。
我来说两句