public、protected、默认不写(friendly)、private。
1、class类的访问权限:
①public:能够供全部的类访问。
②默认(friendly):默承认以称为friendly。可是,Java语言中是没有friendly这个修饰符的,这样称呼应该是来源于C。默认的访问权限是包级访问权限。即:若是写了一个类没有写访问权限修饰符,那么就是默认的访问权限,同一个包下的类均可以访问到,便可以实例化该类(固然若是这个类不具备实例化的能力除外,好比该类没有提供public的构造函数)。
说明:
一、每一个编译单元(类文件)都仅能有一个public class。
二、public class的名称(包含大小写)必须和其类文件同名。
三、一个类文件(*.java)中能够不存在public class。java
这种形式的存在的场景:若是咱们在某个包内撰写一个class,仅仅是为了配合同包内的其余类工做,并且咱们不想再为了撰写说明文档给客户(不必定是现实意义的客户,多是调用这个类的类)看而伤脑筋,并且有可能过一段时间以后有可能会完全改变原有的作法,并彻底舍弃旧版本,以全新的版本代替。
四、class不能够是private和protected。
五、若是不但愿那个任何产生某个class的对象,能够将该类的全部构造函数设置成private。可是即便这样也能够生成该类的对象,就是class的static的成员(变量和方法)能够办到。
2、类的成员变量的访问权限:
①public:紧接public的变量任何类均可以访问到。能够直接使用ClassName.propertyName。可是从类的封装性上想,而将一个类的变量定义成public通常不多使用,在定义静态常量的时候一般会这样定义。如:public static final int PAGE_SIZE=10;
②protected:关键字所处理的是所谓“继承”的观念。对于同一包的其余类,protected=默认,对于不一样包的类,若是存在继承关系,而 baseClass存在protected属性,则能够被其自继承,而不一样包的其余类则不能访问类的protected属性。
③默认(friendly):包级可见,同一个包内的类能够访问到这个属性,能够直接使用className.propertyName来访问,可是从类的封装性特性来讲不多这样使用类的属性。
④ private:只有类自己内部的方法能够访问类的private变量,固然内部类也能够访问其外部类的private成员的(变量和方法)。程序员
3、类的成员方法的访问权限:安全
其从语法角度来说,这些访问权限控制符做用于类的变量和做用于类的方法上的效果是同样的。
①public:全部类可见。
②protected:继承可见。
③默认(friendly):包内可见。
④private:只有同一类内部的方法可见,再有就是内部类也能够访问到。
4、访问权限存在的理由
一、“让使用者没法碰触到他们不应碰触的东西。”这些东西仅供类的内部机制使用。将某些成员声明成private,对于使用者来讲能够说是一种服务,由于这样使用者能够知道哪些是他关注的哪些是不重要的,不须要关注,如此从来对于使用来讲下降了对使用对象认识的难度。
二、(最重要的理由)让程序设计者能够更动class内部运做方式,而无须担忧波及到客户端程序。
5、Java的“访问权限修饰符”赋予classes开发者极具备价值的控制能力。
身为classes开发者,若是你的任何改变能够彻底不干扰你的使用者,你即可以安心改变你的底层实现,由于客户端程序员没法访问class的这一部分。经过今天学习访问权限的问题了解到,接口或者抽象等等策略所谓的“实现隐藏”其根本缘由并非说为了隐藏实现的代码和思路,而是下降使用者的使用难度,以及从维护角度来讲可见范围的控制给程序维护带来了极大的安全性。函数