'protected'和'protected-static'变量有什么区别?

时间:2015-12-04 05:26:27

标签: java oop static protected

我为OOP读了一本书 关于“受保护”访问修饰符的示例对我来说很奇怪。

示例摘要

  1. 此示例用于测试“受保护的”保留字对变量的影响。
  2. ClassA有2个受保护的变量(静态/非静态)

    package a;
    
    public Class A {
    
        protected int a;
        protected static int b;
    }
    

    1. ClassB派生自ClassA并位于另一个包
    2. ClassB.test有一个检查可访问性的方法(无法运行)

      package b;
      
      public Class B extends ClassA {
      
          ClassA x = new ClassA();
      
          // [O] : Executable
          // [X] : Not-executable
          void test() {
      
              a = 1;   // [O] : Derived from ClassA
              b = 1;   // [O] : Derived from ClassA
      
              // [X] : a is protected, so only accessible within codes in derived class
              x.a = 1; // A) 
      
              // [O] : I don't know why it is executable
              x.b = 1; // B) 
          }
      }
      

    3. 实际上,b是“受保护的”所以我认为它不能被实例变量访问,例如 x.a = 1;
      但是可以使用'static'关键字访问它。 我怎么能理解这个?

      很快A)很好,但为什么B)可执行?

1 个答案:

答案 0 :(得分:3)

formattedWorkStations关键字表示变量属于类本身而不是所述类的对象。您可以将static的来电替换为x.b。由于ClassA.b扩展了ClassB,所有ClassA变量都可以随时访问protected static的所有方法。