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。
- class
- //一下方法缺省为friendly
- void
- "Info...");
- }
- }
- public class
- public static void
- new
- studentInfo.printInfo();
- }
- }
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. }