Java类的访问权限详解

Java中总共有四类访问权限修饰符(加上默认的)
private,public,protected,默认不写(firendly)

下面就讲解不同层次的访问权限作用:Java的类有2种访问权限,public、默认;而方法和变量有4种:public、默认、protected、private。

一、Class类的访问权限:

1.public:可以供所有的类访问。
 
2.默认:默认可以称为friendly但是,java语言中是没有friendly这个修饰符的,这样称呼应该是来源于c++。默认的访问权限是包级访问权限
  即如果写了一个类没有写访问权限修饰符,那么就是默认的访问权限,同一个包下的类都可以访问到,即使可以实例化该类(当然如果这个类不具有实例化的能力除外,比如该类没有提供public的构造函数)。
 
  说明:
   1、每个编译单元(类文件)都仅能有一个public class
   2、public class的名称(包含大小写)必须和其类文件同名。
   3、一个类文件(*.java)中可以不存在public class。这种形式的存在的场景:如果我们在某个包内撰写一个class,仅仅是为了配合同包内的其他类工作,而且我们不想再为了撰写说明文档给客户(不一定是现实意义的客户,可能是调用这个类的类)看而伤脑筋,而且有可能过一段时间之后有可能会彻底改变原有的做法,并完全舍弃旧版本,以全新的版本代替。
   4、class不可以是private和protected。
   5、如果不希望那个任何产生某个class的对象,可以将该类得所有构造函数设置成private。但是即使这样也可以生成该类的对象,就是class的static的成员(属性和方法)可以办到。

二、类成员变量的访问权限:

1.public:紧接public的属性任何类都可以访问到。可以直接使用ClassName.propertyName。但是从类的封装性上来考虑将一个类的属性定义成public一般很少使用,在定义静态常量的时候通畅会这样定义。如:public static final int PAGE_SIZE=10;

2.private:只有类本身内部的方法可以访问类的private属性,当然内部类也可以访问其外部类的private成员的。(属性和方法)

3.默认(friendly):包级可见,同一个包内的类可以访问到这个属性,可以直接使用className.propertyName来访问,但是从类的封装性特性来说很少这样使用类的属性的。

4.protected:关键字所处理的是所谓“继承”的观念。对于同一包的其他类,protected=默认,对于不同包的类,如果存在继承关系,而baseClass存在protected属性,则可以被其自继承,而不同包的其他类则不能访问类protected属性。

三、类的成员方法的访问权限:

其从语法角度来讲,这些访问权限控制符作用于类的方法和作用于类的属性上的效果是一样的。
1.public:所有类可见。

2.pirvate:只有同一类内部的方法可见,在有就是内部类也可以访问到。

3.默认(friendly):包内可见。

4.protected:继承可见。

其中默认访问权限和protected很相似,有着细微的差别。

下面放一张图更为直观的看到这四类的相同和区别之处
在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章