前言——
今天军训的第四天,早上下了小雨,摸鱼了一上午,下午练军体拳。想写的内容很多,突然不知道今晚总结什么,最终决定写个基本但是非常重要的部分。 欢迎转载,转载请注明来处。
在Java中有4种访问权限关键字,分别是public,private,protected, 默认访问权限(包访问权限)。这4个权限关键字要么修饰类,要么修饰变量和方法,而且会有一点点小差异,所以我就针对修饰类和方法的不同来展开:
目录
一.修饰类
二.修饰变量和方法。
一.修饰类
类只能被public, 包访问权限这两种修饰。
a.public类
表示这个类在任何地方都可见,就算在不同的Package中也是完全可以的。
如上,Pet类在Code_180这个包当中,而且是个public类。调用Pet类的Limit_Visible是在JavaObject这个包当中。这说明了public类对其他类都可见,无论是在同一个包还是在不同一个包中。
b.默认访问权限(包访问权限)修饰的类
包访问权限的类,顾名思义,只能对同一个包下的类可见,对不同一个包下的类是不可见的。
在这边可以看到,Dog类位于code_180这个包中,而且是默认访问权限。JavaObject包中的Limit_Visible去调用Dog类时就会出错。只要在Code_180这个包中新建一个类文件,然后把Dog类申明为public类就可以了。
二.修饰变量和方法。
前提:这边可调用,包含两种:1种是没有继承关系时,在内部通过创建其他类的引用(包含main方法里面的引用)调用;另一种,是有继承关系时,在子类内部无须创建引用地调用。如果不可调用,表示两种情况都不可以。
a.包访问权限(默认访问权限)。
此时被修饰的方法和变量只能在同一个包中被显示地调用,其他包不能调用。
在这边,Pet类虽然是Public类,但是其getType()方法是默认访问权限,只能在同一个包中访问。很明显,二者不在同一个包中,所以访问会出错,修改方法就是把这个方法改为public权限。
b.public权限
被public修饰过的方法和变量,对于与该类在同一个包或者非同一个包的类都是可见的(当然了,必须要保证这个方法所在的类也是要public,这样才比较严谨)。
这边getType因为被修改成了public权限,所以在不同的包也可以访问了。
c.private权限
如果一个方法或者变量是private权限,则这个类或者方法只能在这个类的内部被访问,其他地方都 无法访问(无论是否在同一个包中,都是无法访问的)
这边可以看到,Pet类和test类都在Code_180这个包当中,而且Pet类是public类,但是由于getType()是private方法,所以在test类中也无法调用这个方法。
d.protected权限
protected权限修饰的方法,能在同一个包中被访问;对于不在同一个包中的类,如果想访问protected方法的话,那么这个类应该是该类的子类,而且是通过在子类的内部调用父类的protected方法。
这边虽然Pig类和Pet类在不同的包,但是由于Pig类是Pet类的子类,Pig类内部是可以访问Pet类的方法的。