java中为什么子类仍然可以通过继承公共方法访问父类的私有变量?

比如:
父类 A
public class A {
private int x;
public void setX(int x)
{
this.x = x;
}
public int getX()
{
return this.x;
}
}

子类B继承A后 (public class B extends A),自己不存在x这个成员变量,但是外界却可以通过调用B.setX()和B.getX()访问到A的x变量。请问这样一来在运行时B这个实例b是否存在x这个变量,即实际上内存中只存在一个实例b,b有一个不可见的变量x?还是说内存中同时存在不可见的一个父类A的实例a和可见的子类B的实例b,然后调用b.setX()的时候会修改a.x的值?

那是因为父类中的私有变量在父类中被方法调用了,当子类执行的时候回默认执行父类中的构造方法,所以是可以的,举例:

    父类

public class A {  

private int x =5; 

public void setX(int x)  {  this.x = x;  }

public int getX()  {  return this.x;  }  

}

    子类

public class B extends A {  }

这个时候如果通过“B.getX();”输出的结果就是:5;

温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-03-02
B继承了A,B就拥有了A的所有属性和方法,也就是B有x这个属性,也有getX()和setX()方法,自然可以处理x.就像师傅把所有的知识和能力都给了徒弟,徒弟就可以做和师傅一样的工作.
第2个回答  推荐于2017-09-20
这个一定是就有父类的实例了 因为继承里已经说明 子类执行构造方法之前 一定会默认先执行父类的构造方法 !!本回答被提问者采纳
第3个回答  2009-03-02
java是运行时编译,在运行对子类的对象的创建的时候,先在内存中构建了父类的对象并分配了内存区域,用来存放其内部变量,然后创建了子类的对象,通过b.setX()就可以改变x的值。
第4个回答  2009-03-02
很重要的一个知识点 子类的实现必须先调用默认的 父类的构造器(父类空参构造方法) 你可以做个小实验 做一个父类 如果它没有构造器 则继承它的 子类在加载 的时候 就会出现编译错误。
相似回答