Kan*_*thy 8 java inheritance access-modifiers
需要对私有变量和继承有更多的了解.之前我的理解是,如果一个类中有字段,并且当我继承该类时,不受访问限制的字段(私有变量)将存在于继承的类中.但是如果有一个公共g/setter方法,我可以在基类中使用私有变量.
我怎样才能想象一个基类中的私有变量.
小智 11
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();
Run Code Online (Sandbox Code Playgroud)
结果将是10.类A中的私有字段a是继承到B的类,但是B不能直接访问它.只能使用A类中定义的public/default/protected访问器方法.B是A所以它总是具有A中所有相同的字段,并且可能在B类中定义了一些新字段.
Evg*_*eev 10
这就是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);
Run Code Online (Sandbox Code Playgroud)
它工作正常并返回iB实例的字段值.也就是说,B有i.
| 归档时间: |
|
| 查看次数: |
33553 次 |
| 最近记录: |