代码之家  ›  专栏  ›  技术社区  ›  Namratha

跨包访问字段

  •  0
  • Namratha  · 技术社区  · 16 年前

    如何在包中访问字段?目前,即使它们被声明为public,我也无法从同一个包中的另一个类访问这些字段。

    2 回复  |  直到 16 年前
        1
  •  0
  •   Stephen C    16 年前

    这里有一个更贴切的例子(根据安德烈亚斯的例子。。。好像不明显似的!)

    需要引用在同一个包中声明的类。

    package pkg;
    
    public class One {
      public int fieldOne;
    }
    

    package pkg;
    
    public class Two {
      private One one;
      public int getOne() {
        return one.fieldOne;
      }
    }
    

    为了说明最后一点:

    public class A {
       public int counter;
       private int counter2;
       public int getCounter2() { return counter2; }
       public void setCounter2(int c) { counter2 = c; }
    }
    
    public class B extends A {
       public void setCounter2(int c) {
          if (c < 0) throw new IllegalArgumentException("counter2 cannot be negative");
          super.setCounter2(c); 
       }
    }
    

    比较一下 counter counter2 属性的行为。如果是 柜台 ,任何类中的任何代码都可以不受限制地读取或更新属性。这两种方法都适用于类的实例 A 以及任何延伸到 A . 如果其他班级决定 柜台 到一个坏值。。。没有什么可以阻止它。

    如果是 计数器2 ,的实例的属性 A 只能由 getCounter2 setCounter2 方法。如果我愿意,我可以在中更改这些方法 要进行验证,请执行访问检查,将状态更改通知某个侦听器,等等。因为这种行为只能发生在 A ,我知道在发生奇怪的事情时从哪里开始寻找。

    (例如。 B ),我可以 private 设置计数器2 B中的方法仍然必须调用其超类中的方法。这也很好。

        2
  •  0
  •   Andreas Dolk    16 年前

    package one;
    
    public class A {
      public int fieldA;
    }
    

    package two;
    import one.A;
    
    public class B {
      private A a;
      public int getA() {
        return a.fieldA;
      }
    }