java中属性的权限问题

来源:互联网 发布:域名中com代表什么 编辑:程序博客网 时间:2024/05/20 00:52
属性分为2种,
1 类实例的属性,属于某个类的实例所有,必须通过实例访问
2 类级的静态属性,属于类和所有实例所有,可通过类或者实例都可以访问

属性的权限分为
1 private 私有属性
2 [default] 默认属性,也就是啥都不写的那种,运行同一个package的访问
3 protected 被保护的属性,允许同一个package的访问,以及子类访问
4 public 公开的属性,可以被任何类访问

先看主类
lession4/Lession4.java
  1. package lession4;

  2. public classLession4 {
  3. // -----------------------
  4. // -- 实例属性,属于类的某个实例
  5. // ------------------------

  6. // 私有的实例属性
  7. // 只有类自己能访问
  8. privateint num1 = 1;

  9. // 默认的实例属性
  10. // 自己和同一个package的其它类可以访
  11. int num2 = 2;

  12. // 被保护的实例属性
  13. // 自己和同一个pacakge的类以及子类可以访问
  14. protectedint num3 = 3;

  15. // 公开的实例属性
  16. // 任何其它类都可以访问
  17. public int num4 = 4;

  18. // -----------------------
  19. // -- 类静态属性,属于类的所有实例
  20. // ------------------------

  21. // 私有的类静态属性
  22. // 只有类自己能访问
  23. privatestatic intnum11 = 1;

  24. // 默认的类静态属性
  25. // 自己和同一个package的其它类可以访问
  26. static int num12 = 12;

  27. // 被保护的类静态属性
  28. // 自己和同一个pacakge的类以及子类可以访问
  29. protectedstatic intnum13 = 13;

  30. // 公开的类静态属性
  31. // 任何其它类都可以访问
  32. public static intnum14 = 14;

  33. public static voidtestStatic() {
  34. // 方法的局部变量
  35. // 只有方法内部可以访问
  36. int num21 = 21;

  37. // 使用属性
  38. // 在静态方法里面可以使用静态属性
  39. // 不能使用类实例属性
  40. num11 = 11;
  41. num12 = 12;
  42. num13 = 13;
  43. num14 = 14;
  44. }

  45. public void testInstance() {
  46. // 方法的局部变量
  47. // 只有方法内部可以访问
  48. int num31 = 31;

  49. // 使用属性
  50. // 在非静态方法里面可以使用实例属性
  51. num1 = 1;
  52. num2 = 2;
  53. num3 = 3;
  54. num4 = 4;

  55. // 在非静态方法里面可以使用静态属性
  56. num11 = 11;
  57. num12 = 12;
  58. num13 = 13;
  59. num14 = 14;
  60. }
  61. }
lession4/TestSamePackage.java
  1. package lession4;

  2. public classTestSamePackage {
  3. public void test() {
  4. Lession4 lession4 = newLession4();
  5. // 可以使用非private的所有类实例级属性
  6. lession4.num2 = 2;
  7. lession4.num3 = 3;
  8. lession4.num4 = 4;

  9. // 可以使用了非private的所有类级的静态属性
  10. lession4.num12 = 12;
  11. lession4.num13 = 13;
  12. lession4.num14 = 14;

  13. // 测试访问私有属性
  14. // lession4.num1=1;
  15. }

  16. }
lession4/otherpackage/TestSubClassOtherPackage.java
  1. package lession4.otherpackage;

  2. import lession4.Lession4;

  3. publicclassTestSubClassOtherPackage extendsLession4 {
  4. publicvoidtest() {
  5. //可以使用protected和public的类实例级属性
  6. num3 = 3;
  7. num4 = 4;

  8. //可以使用protected和public的类级静态属性
  9. num13 = 13;
  10. num14 = 14;
  11. }
  12. }

lession4/otherpackage/TestOtherPackage.java
  1. package lession4.otherpackage;
  2. import lession4.Lession4;
  3. public classTestOtherPackage {
  4. public voidtest() {
  5. Lession4 lession4 = newLession4();
  6. // 只能使用public的类实例级属性
  7. lession4.num4 = 4;
  8. // 只能使用public的类级静态属性
  9. lession4.num14 = 14;
  10. }
  11. }
0 0