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方法 而且 不用他调用成员变量 只用他 来调用一般方法
达到父类引用指向 子类对象的目的。
|
|