可能大部分人只知道访问权限修饰符的访问范围,却不太清楚具体的使用情况,今天我来为大家梳理一下。
Java 的访问权限修饰符有:public,private,protected,默认不写,这四种。主要说以下两个方面:
一、可访问的范围
1. public 表明该数据成员、成员函数是对所有用户开放的,所有用户都可以直接进行调用。
2. private 表示私有,私有的意思就是除了class自己之外,任何人都不可以直接使用,私有财产神圣不可侵犯嘛,即便是子女,朋友,都不可以使用。
3. protected 对于子女、朋友来说,就是public 的,可以*使用,没有任何限制,而对于其他的外部class,protected就变成private 。
4. friendly修饰的类叫友元类,在另外一个类中使用友好类创建对象时,要保证它们在同一包中,就是说在一个包内的类互为友元类。
注释:
1、友元类就是默认不写的情况。
2、同包是指类中的backage名称相同。并无父子包一说。
二、修饰情况
类:
public 将一个类声明为公共类,他可以被任何对象访问,一个程序的主类必须是公共类。
friendly 默认的修饰符,只有在相同包中的对象才能使用这样的类。
成员变量:
public(公共访问修饰符)
private(私有访问修饰符)指定该变量只允许自己的类的方法访问,其他任何类(包括子类)中的方法均不能访问。
protected(保护访问修饰符)指定该变量可以别被自己的类和子类访问。在子类中可以覆盖此变量。
friendly ,在同一个包中的类可以访问,其他包中的类不能访问。
方法:
public(公共修饰符)
private(私有修饰符)指定此方法只能有自己类等方法访问,其他的类不能访问(包括子类)
protected(保护访问修饰符)指定该方法可以被它的类和子类进行访问。
friendly ,在同一个包中的类可以访问,其他包中的类不能访问。
总结:
1、以package为前提:分为两种情况,两个类的package相同时是可以访问到类的,package不同时就看是不是public或者是不是子类。
2、以类为准则:这些修饰符不管是作用在类、成员变量、方法上,都是相对于类来说的;也就是说成员和方法的访问必须要先能够访问到类。
升华总结:
1、背景:这就涉及类的使用了,你想一个类中真正启作用的是不是方法,方法中要使用的自己类中的成员变量和方法,不管你访问修饰符是什么都
能够访问自身的成员变量和方法对不对。但是你想访问其他的类就涉及到访问权限的问题了对吧!由此得出访问权限修饰符是为类而设计
的,你想访问类,就得先找到类,就出现了package。package的值就代表你这个类的位置。所以关键点出现在package和类的上面。
2、类的访问场景:A类访问B类,只有A类能够访问B类时才能访问其中的方法,顺序都是从左到右,如下图所示
A、B的package |
A是否能访问B |
在A类中访问B类成员变量和方法 |
相同 |
可以 |
有private修饰的不能访问,其他都可访问 |
不同 |
类的修饰符public或者A是子类才可以 |
只有public或者protected修饰的能够访问 |
3、类的访问修饰符规则:
1> 请思考一下,为什么上面的访问要提及子类呢?为什么子类可以访问而父类不能访问呢?其实不难发现,你想访问到该类你必须先找到他吧!
也不难看出他需要所访问类的地址,这就出现了import关键字,他就是用来指明你所需要访问的类的地址的。因为子类继承了父类,import
了父类的地址,所以能够访问。其他也就不用多说你也知道,如果想访问一个类,很简单import就行了对吧!如果是在同一个包自然不用import。
也就说明了访问类的真正规则是在package和import这两个关键字上的,同包就package,不同包就import。
2> 是不是所有的类都可以import呢?你不难发现类的访问修饰符就两种public和默认不写,而默认不写也就是友元类。他是只能在同包中使用,
不同包是不能使用的,不同包不能使用也就意味着不能import,所以也不能被其他包的类所继承。
4、成员变量和方法的访问修饰符规则:
这个访问都是能够访问到另一个类才有效,所以以下是能够访问到另一个类情况:
同包是除了private修饰的成员变量和方法,其他都可以访问。主要说一下不同包的情况,对于默认不写的情况都是不可访问的,这也很好理解
他需要的包相同,protected的修饰符是需要继承才能访问。
精简总结:
public 开放所有,
private 不能跨类访问,
friendly 不能跨包访问,
protected 跨包需要继承才能访问。
最简总结:默认不写不跨包,保护跨包要继承。
以上是自己的学习心得,希望能帮到大家更好的理解,不足之处欢迎指正。谢谢大家!
引用:https://zhidao.baidu.com/question/1365965665743882419.html