天天看点

java修饰符的访问权限_Java访问权限修饰符

可能大部分人只知道访问权限修饰符的访问范围,却不太清楚具体的使用情况,今天我来为大家梳理一下。

Java 的访问权限修饰符有:public,private,protected,默认不写,这四种。主要说以下两个方面:

一、可访问的范围

java修饰符的访问权限_Java访问权限修饰符

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  跨包需要继承才能访问。

最简总结:默认不写不跨包,保护跨包要继承。

以上是自己的学习心得,希望能帮到大家更好的理解,不足之处欢迎指正。谢谢大家!