刘张朋 发表于 2013-8-25 12:17
package reflecttest;
import java.lang.reflect.Field;
public class PrivateExtendsTest extends Refle ...
子类是不会重新备份一份父类继承下来的成员的,原因是这样太消耗内存.其次是这样违反了面向对象的原则性.加入子类在继承过程中自己备份的父类的成员,那么this.x和super.x完全不能相互约束的两个变量,那么继承就没有意义了,因为这个会造成子类对象要去访问父类的成员时实际上却是访问子类本身的那份成员.
至于你上面代码: Field field = PrivateExtendsTest.class.getField("x");//这里会报错
是因为x是父类的成员变量,所以你在子类的字节码中是没有找到x的Field对象的,所以最终会报错!
|