在继承的类中使用私有变量 - Java

2022-09-05 00:24:50

需要对私有变量和继承有更多了解。早些时候我的理解是,如果一个类中有字段,并且当我继承该类时,不受access(私有变量)限制的字段将存在于继承的类中。但是,如果有公共 g/setter 方法,我可以在基类中使用私有变量。

我怎么能想象基类中的私有变量?


答案 1
class A {
  private int a;
  public A(int a) { this.a = a; }
  public int getA() {return a;}
}

class B extends A {
  public B(int b) { super(b); }
  public int getB() {return getA();}
}

int result = new B(10).getA();

结果将为 10。类 A 中的私有字段 a 有点继承给 B,但 B 不能直接访问它。只有通过使用在类 A 中定义的公共/默认/受保护的访问器方法。B 是 A,因此它始终具有 A 中所有相同的字段,并且可能具有在类 B 中定义的一些新字段。


答案 2

这是Java教程 http://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html 所说的:

子类不继承其父类的私有成员。但是,如果超类具有用于访问其私有字段的公共或受保护方法,则子类也可以使用这些方法

但是,请参阅此内容

class A {
   private int i;
}

class B extends A {
}

B b = new B();
Field f = A.class.getDeclaredField("i");
f.setAccessible(true);
int i = (int)f.get(b);

它工作正常,并从B实例返回字段的值。也就是说,B 具有 .ii


推荐