在inheritance的类中使用私有变量 – Java

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

我怎样才能想象一个基类中的私有变量。

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是inheritance到B的类,但是B不能直接访问它。 只能使用A类中定义的public / default / protected访问器方法.B是A所以它总是具有A中的所有相同字段,并且可能在B类中定义一些新字段。

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

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

不过,看到这个

 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实例返回字段i值。 也就是说,B有i

私有变量/成员不是inheritance的。 这是唯一的答案。

提供公共访问器方法是封装工作的方式。 您将数据设为私有,并提供获取或设置其值的方法,以便可以控制访问。