有哪些做网站的品牌,许昌网站开发,备份wordpress的文章,网站内容建设和管理引言Java中的访问权限理解起来不难#xff0c;但完全掌握却不容易#xff0c;特别是4种访问权限并不是任何时候都可以使用。下面整理一下#xff0c;在什么情况下#xff0c;有哪些访问权限可以允许选择。一、访问权限简介访问权限控制#xff1a; 指的是本类及本类内部的…引言Java中的访问权限理解起来不难但完全掌握却不容易特别是4种访问权限并不是任何时候都可以使用。下面整理一下在什么情况下有哪些访问权限可以允许选择。一、访问权限简介访问权限控制 指的是本类及本类内部的成员(成员变量、成员方法、内部类)对其他类的可见性即这些内容是否允许其他类访问。Java 中一共有四种访问权限控制其权限控制的大小情况是这样的public protected default(包访问权限) private,具体的权限控制看下面表格列所指定的类是否有权限允许访问行的权限控制下的内容访问权限本类本包的类子类非子类的外包类public是是是是protected是是是否default是是否否private是否否否1、public 所修饰的类、变量、方法在内外包均具有访问权限2、protected 这种权限是为继承而设计的protected所修饰的成员对所有子类是可访问的但只对同包的类是可访问的对外包的非子类是不可以访问3、包访问权限(default) 只对同包的类具有访问的权限外包的所有类都不能访问4、private 私有的权限只对本类的方法可以使用注意 要区分开 protected 权限、包访问权限正确使用它们当某个成员能被所有的子类继承但不能被外包的非子类访问就是用protected当某个成员的访问权限只对同包的类开放包括不能让外包的类继承这个成员就用包访问权限使用访问权限控制的原因1)使用户不要碰触那些他们不该碰触的部分2)类库设计者可以更改类的内部工作的方式而不会担心这样会对用户产生重大影响二、访问权限控制的使用场景访问权限使用的场景可以总结为下面的五种场景分别对访问权限的使用有不同的限制1. 外部类的访问控制外部类(外部接口) 是相对于内部类(也称为嵌套类)、内部接口而言的。外部类的访问控制只能是这两种public 、default 。//public 访问呢权限的外部类所有类都可以使用这个类public class OuterClass {}//default 权限的外部接口所有类、接口均可以使用此接口interface OuterInterface{}2. 类里面的成员的访问控制类里面的成员分为三类 成员变量、成员方法、成员内部类(内部接口)类里面的成员的访问控制可以是四种也就是可以使用所有的访问控制权限public class OuterClass {public int aa; //可以被所有的类访问protected boolean bb; //可以被所有子类以及本包的类使用void cc() { //default 访问权限能在本包范围内使用System.out.println(包访问权限);}//private权限的内部类即这是私有的内部类只能在本类使用private class InnerClass{}}注意这里的类里面的成员 是指类的全局成员并没有包括局部的成员(局部变量、局部内部类没有局部内部接口)。或者说局部成员是没有访问权限控制的因为局部成员只在其所在的作用域内起作用不可能被其他类访问到。public void count(){//局部成员变量public int amount;//编译无法通过不能用public修饰int money;//编译通过//局部嵌套接口class customer{//编译通过}}上面的两种场景几乎可以适应所有的情况但有一些情况比较特殊还做了有些额外访问权限的要求3. 抽象方法的访问权限普通方法是可以使用四种访问权限的但抽象方法是有一个限制不能用private 来修饰也即抽象方法不能是私有的否则子类就无法继承实现抽象方法。4. 接口成员的访问权限接口由于其的特殊性所有成员的访问权限都规定得死死的下面是接口成员的访问权限变量 public static final抽象方法 public abstract静态方法 public staticJDK1.8后才支持内部类、内部接口 public static也因为所有的一切都默认强制规定好了所以我们在用的时候并不一定需要完整写出所有的修饰符编译器会帮我们完成的也就是可以少写修饰符但不能写错修饰符。public interface Interface_Test {public int aa 6; //少写了 static finalint bb 5; ////嵌套接口可以不写public staticinterface cc{}}5. 构造器的访问权限构造器的访问权限可以是以上四种权限中的任意一种1、采用 private一般是不允许直接构造这个类的对象再结合工厂方法(static方法)实现单例模式。注意所有子类都不能继承它。2、采用包访问控制比较少用这个类的对象只能在本包中使用但是如果这个类有static 成员那么这个类还是可以在外包使用(也许可以用于该类的外包单例模式)。注意外包的类不能继承这个类3、采用 protected 就是为了能让所有子类继承这个类但是外包的非子类不能访问这个类4、采用 public 对于内外包的所有类都是可访问的注意 构造方法有点特殊因为子类的构造器初始化时都要调用父类的构造器所以一旦父类构造器不能被访问那么子类的构造器调用失败意味子类继承父类失败