Java访问权限


一.Java访问权限饰词(access specifiers)

Java有public、protect、friendly、private四种访问权限,并且这四访问权限的访问范围越来越小。

1. friendly

   1)如果一个class内的数据成员或方法没有任何权限饰词,那么它的缺省访问权限就是friendly。同一个package内的其它所有classes都可以访问friendly成员,但对package以外的classes则形同private。

   2)对于同一个文件夹下的、没有用package的classes,Java会自动将这些classes初见为隶属于该目录的default package,可以相互调用class中的friendly成员。如以下两个class分别在同一个文件夹的两个文件中,虽然没有引入package,但隶属于相同的default package。

1. class
2. //一下方法缺省为friendly
3. void
4. "Info...");
5.     }
6. }
7. 
8. public class
9. public static void
10. new
11.         studentInfo.printInfo();
12.     }
13. }

2. public

   可以被任何class调用

3. private

   private成员只能在成员所属的class内被调用,如:

1. class
2. //构造方法被声明为private,只能在类StudentInfo中调用
3. private
4. //缺省为friendly,可以在同一个包中的其他类调用
5.     Student(String name) {

6. //...
7.     }
8. static
9. return new
10.     }
11. }
12. 
13. public class
14. public static void
15. //类Student中构造方法Student()是private的,所以不能用它进行初始化
16. //Student student = new Student();非法!
17. //Student(String)是friendly的,可以在这里调用
18. new Student("Yang");
19.         Student student2 = student1.getStudent();
20.     }
21. }

4. protected

   具有friendly访问权限的同时,又能被subclass(当然包括子孙类,即子类的子类)所访问。即,既能被同一package中的classes访问,又能被protected成员所在class的subclass访问。

二.Class的访问权限

1.Class同样具有public、protect、friendly、private四种访问访问权限:

   1)public:在任何地方都可被使用

   2)protect、private:除了它自己,没有任何class可以使用,所以class不能是protected或private(inner class除外)

   3)friendly:同一个package中的classes能用

2. 如何调用构造函数被声明为private的class

   1)用static函数

   2)用Singteton模式

1. //静态函数方法
2. class
3. private
4. public static
5. return new
6.     }
7. public void
8. out.println(info);
9.     }
10. }
11. //"Singleton"模式
12. class
13. private static Student student = new
14. private
15. public static
16. return
17.     }
18. public void
19. out.println(info);
20.     }
21. }
22. 
23. public class
24. public static void
25. //Student student1 = new Student();非法!
26.         Student student2 = Student.getStudent();
27. "Student2");
28.     }
29. }



一.Java访问权限饰词(access specifiers)

Java有public、protect、friendly、private四种访问权限,并且这四访问权限的访问范围越来越小。

1. friendly

   1)如果一个class内的数据成员或方法没有任何权限饰词,那么它的缺省访问权限就是friendly。同一个package内的其它所有classes都可以访问friendly成员,但对package以外的classes则形同private。

   2)对于同一个文件夹下的、没有用package的classes,Java会自动将这些classes初见为隶属于该目录的default package,可以相互调用class中的friendly成员。如以下两个class分别在同一个文件夹的两个文件中,虽然没有引入package,但隶属于相同的default package。


  1. class
  2. //一下方法缺省为friendly
  3. void
  4. "Info...");
  5.     }
  6. }

  7. public class
  8. public static void
  9. new
  10.         studentInfo.printInfo();
  11.     }
  12. }


2. public

   可以被任何class调用

3. private

   private成员只能在成员所属的class内被调用,如:

1. class
2. //构造方法被声明为private,只能在类StudentInfo中调用
3. private
4. //缺省为friendly,可以在同一个包中的其他类调用
5.     Student(String name) {

6. //...
7.     }
8. static
9. return new
10.     }
11. }
12. 
13. public class
14. public static void
15. //类Student中构造方法Student()是private的,所以不能用它进行初始化
16. //Student student = new Student();非法!
17. //Student(String)是friendly的,可以在这里调用
18. new Student("Yang");
19.         Student student2 = student1.getStudent();
20.     }
21. }

4. protected

   具有friendly访问权限的同时,又能被subclass(当然包括子孙类,即子类的子类)所访问。即,既能被同一package中的classes访问,又能被protected成员所在class的subclass访问。

二.Class的访问权限

1.Class同样具有public、protect、friendly、private四种访问访问权限:

   1)public:在任何地方都可被使用

   2)protect、private:除了它自己,没有任何class可以使用,所以class不能是protected或private(inner class除外)

   3)friendly:同一个package中的classes能用

2. 如何调用构造函数被声明为private的class

   1)用static函数

   2)用Singteton模式

1. //静态函数方法
2. class
3. private
4. public static
5. return new
6.     }
7. public void
8. out.println(info);
9.     }
10. }
11. //"Singleton"模式
12. class
13. private static Student student = new
14. private
15. public static
16. return
17.     }
18. public void
19. out.println(info);
20.     }
21. }
22. 
23. public class
24. public static void
25. //Student student1 = new Student();非法!
26.         Student student2 = Student.getStudent();
27. "Student2");
28.     }
29. }