共计 1744 个字符,预计需要花费 5 分钟才能阅读完成。
Java 提供了 4 种访问控制级别
- private
- 不加任何拜访控制符的访问控制级别(default)
- protected
- public
从上到下,访问控制级别由小到大。
权限介绍
- private:以后类拜访权限。如果类中的成员(包含属性、办法和结构器等)应用 private 拜访控制符来润饰,则这个成员只能在以后类的外部被拜访。
- default:包拜访权限。如果类中的成员(包含属性、办法和结构器等)或者一个外部类,不必任何拜访控制符润饰,咱们就称它是包拜访权限。default 访问控制的成员或外部类能够被雷同包下的其余类拜访。
- protected:子类拜访权限。如果类中的成员(包含属性、办法和结构器等)应用 protected 拜访控制符来润饰,则这个成员即能够被同一个包中的其余类拜访,也能够被不同包中的子类拜访。
- public:公共拜访权限。这是一个最宽松的访问控制级别。如果类中的成员(包含属性、办法和结构器等)或者一个外部类,应用 public 拜访控制符来润饰,那么这个成员或者外部类就能够被所有类拜访,不论拜访类和被拜访类是否处于同一个包中,不论是否具备父子继承关系。
外部类 只能有两种访问控制级别:public 和默认default。外部类不能应用 private 和 protected 润饰。因为外部类没有处于任何类的外部,也就没有所在类的外部、所在类的子类两个范畴。因而,private 和 protected 拜访控制符对外部类没有意义。
拜访级别管制表
private | default | protected | public | |
---|---|---|---|---|
同一个类中 | √ | √ | √ | √ |
同一个包中 | √ | √ | √ | |
子类中 | √ | √ | ||
全局范畴内 | √ |
下面表格横向(每行)比拟
比方:有 3 个类,C1,C2,C3。
- 其中 C1 和 C2 在同一个包下
- C3 和 C2 不在一个包下,且 C3 继承了 C2,即,C3 是 C2 的不同包下的子类。
-
在同一个类中,C2 拜访本类中的属性、办法和默认类。都可拜访。
//C2 类 package com.study.demo1; public class C2 { private int a; int b; protected int c; public int d; private void test1(){} void test2(){} protected void test3(){} public void test4(){} public static void main(String[] args) {C2 c2 = new C2(); c2.a = 1; c2.b = 2; c2.c = 3; c2.d = 4; c2.test1(); c2.test2(); c2.test3(); c2.test4(); T t = new T();} } // 没有任何拜访控制符润饰的类 class T{}
-
在同一个包中,C1 拜访 C2 中的属性、办法和默认类。除了 private 拜访控制符润饰的属性或办法,其余拜访控制符润饰的,都可拜访。
//C1 类 package com.study.demo1; public class C1 {public static void main(String[] args) { // 类 C1 与类 C2 在同一个包内 C2 c2 = new C2(); //c2.a = 1;// 编译报错 c2.b = 2; c2.c = 3; c2.d = 4; //c2.test1();// 编译报错 c2.test2(); c2.test3(); c2.test4(); T t = new T();} }
-
子类中,C3 和 C2 不在一个包下,且 C3 继承了 C2,即,C3 是 C2 的不同包下的子类。子类中,只能拜访父类中的 protected 和 public 拜访控制符润饰的属性和办法。
package com.study.demo2; import com.study.demo1.C2; public class C3 extends C2 {public static void main(String[] args) { // 类 C3 继承类 C2 // 即类 C3 是类 C2 的子类 C3 c3 = new C3(); //c3.a = 1;// 编译报错 //c3.b = 2;// 编译报错 c3.c = 3; c3.d = 4; //c3.test1();// 编译报错 //c3.test2();// 编译报错 c3.test3(); c3.test4(); //T t = new T();// 编译报错} }
- 全局范畴类,public 拜访控制符润饰的属性、办法能够被全局拜访。
正文完