目录
Java有四种访问权限,其中三种有访问权限修饰符,分别为 private,public 和 protected,还有一种不带任何修饰符:
- private:Java语言中对访问权限限制的最窄的修饰符,一般称之为”私有的“。被其修饰的类、属性以及方法只能被该类的对象访问,其子类不能访问,更不能允许挎包访问。
- default:即不加任何访问修饰符,通常称为”默认访问模式“,该模式下,只允许在同一个包中进行访问。
- protected:介于public 和 private 之间的一种访问修饰符,一般称之为”保护形“。被其修饰的类、属性以及方法只能被类本身的方法及子类访问,即使子类在不同的包中也可以访问。
- public:Java语言中访问限制最宽的修饰符,一般称之为”公共的“。被其修饰的类、属性以及方法 不仅可以跨类访问,而且允许跨包(package)访问。
| 权限修饰符 | 同一个类 | 同一个包 | 不同包的子类 | 不同包的非子类 |
| private(私有) | √ | × | × | × |
| default(默认) | √ | √ | × | × |
| protected(受保护) | √ | √ | √ | × |
| public(公开) | √ | √ | √ | √ |
开发使用的次数排名:private > public > protected > default
层级结构如下:

下面的代码注释,就说明访问不到 报错
Parent.java
- package com.面向对象.Demo10;
-
- public class Parent {
- private int private_Age; // 当前类
- protected int protect_Age; // 同一个包/不同包的子类
- public int public_Age; //同一个包/不同包
- int default_Age; //同一个包
-
- /**
- * 权限修饰符(加在 方法/属性/类)
- * 1.public
- * 2.private 只能在本类中访问
- * 3.default
- * 4.protected
- */
- public void public_a1() {
- }
-
- private void private_a2() {
- }
-
- // default void deafult_a3(){} //default方法前面不需要加default,报错
- void default_a3() {
- }
-
- protected void protected_a4() {
- }
-
-
- public static void main(String[] args) {
- Parent parent = new Parent();
- parent.private_a2(); // 只能本类访问
- parent.default_a3(); // 同一个包/类下可以访问
- parent.protected_a4(); // 同一个包/类,不同包的子类 可以访问
-
- parent.private_Age = 10;
- parent.protect_Age = 10;
- parent.public_Age = 10;
- parent.default_Age = 10;
-
- }
-
- }
Demo01.java
- package com.面向对象.Demo10;
-
- public class Demo01 {
- public static void main(String[] args) {
- Parent parent = new Parent();
- // parent.privat_a2(); //private只可以在同类中访问,这里访问不到
- parent.default_a3(); // 同一个包/类下可以访问
- parent.protected_a4(); // 同一个包/类,不同包的子类 可以访问
-
- // parent.private_Age = 10; //只能同一个类
- parent.protect_Age = 10;
- parent.public_Age = 10;
- parent.default_Age = 10;
- }
- }
Demo02.java
- package com.面向对象.Demo11;
-
- import com.面向对象.Demo10.Parent;
-
- public class Demo02 extends Parent{
- // 不同包的非子类
- public static void main(String[] args) {
- Parent parent = new Parent();
- parent.public_a1();
- // parent.private_a2(); // private只可以在同类中访问,这里访问不到
- // parent.default_a3(); // 只能在同一个包/类下可以访问,这里访问不到
-
- // parent.private_Age = 10; // 只能同一个类
- // parent.protect_Age = 10; //同一个包/不同包的子类
- parent.public_Age = 10;
- // parent.default_Age = 10; // 同一个包
- }
- // 不同包的子类
- public void test(){
- protected_a4(); // 不同包的子类(同一个包/类,不同包的子类 可以访问)
-
- // private_Age = 10; //同一个类
- protect_Age = 10; //同一个包/不同类的子类
- public_Age = 10; //公开
- // default_Age = 10; // 同一个包
- }
- }
下一篇文章:继承练习