A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© 待解封的小刀 中级黑马   /  2014-7-30 10:38  /  855 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class Fu{
int x=3;

class Zi extends Fu
{  int x=7;

Fu f=new Zi();
f.x=?答案是3 为什么不是7呢?
分析  我们首相要明白 x 是作为成员变量的 是定义在方法之外 存在与对象中的
不能想当然的 把x 作为局部变量来看
int x=3
x=7
x=? 肯定是7 这个是局部变量。
而作为成员变量的话 子类的对象 和父类的对象  他们的成员变量是相互独立的 所以 谁调用成员 就会显示哪个,父类中 有个x=3 子类中有个x=7 都在对内存的对象里面 所以相互独立
他们就像是 static 的方法一样 谁调用 就显示谁
所以 多态 要明确 一点
建立多态是为了提高扩展性 用父类引用调用父类的方法 和成员  并指向子类对象。这个是重点
所以 多态中 只能是父类引用 调用父类成员  但是这个结果是父类还是子类的 要具体分析
像上面的 虽然是多态 但并不是 指向子类的x=7 。静态方法static 也是这样。
所以 我们使用多态 一般是 没有static方法 而且 不用他调用成员变量 只用他 来调用一般方法
达到父类引用指向 子类对象的目的。




您需要登录后才可以回帖 登录 | 加入黑马