需要有对私有变量和继承更多的了解。 早些时候,我的理解是,如果有一类领域,当我继承的类,即不通过限制访问的字段(私有变量)将在那里在继承类。 但我能使用基类的私有变量,如果有一个公共克/ setter方法。
我如何能想象在基类中的私有变量?
需要有对私有变量和继承更多的了解。 早些时候,我的理解是,如果有一类领域,当我继承的类,即不通过限制访问的字段(私有变量)将在那里在继承类。 但我能使用基类的私有变量,如果有一个公共克/ 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();
结果将是在类A 10私人字段被种遗传到B而B不能直接访问它。 只有通过使用公共/默认/保护访问类A,B定义的方法是一所以它总是有所有有能力的和有可能在B类中定义了一些新的领域相同的领域
这是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);
它工作正常,返回字段的值, i
的B实例。 也就是说,B有i
。
私有变量/成员不继承。 这是唯一的答案。
提供公共访问方法是这样的封装工作。 你让你的数据的私有性,并提供方法来获取或设置它们的值,从而接入可以控制的。