JAVA中多态时子类和父类的成员变量重名,用父类的引用变量去引用子类的对象时的小问题

class Fu
{
int a = 5;
public void m1()
{
System.out.println("父类的方法");
}
}
class Zi extends Father
{
int a = 10;
public void m1()
{
System.out.println("子类的方法");
}
}
public class MyTest {

public static void main(String as[])
{
Fu f = new Zi();
System.out.println("a=" + f.a);
}
打印输出是 5,我现在知道成员变量编译和运行时都是看等号左边。
我想知道具体的过程是怎么样的,最好有内存详解。
求大神解答。

其实是有两个a变量,有a=10和a=5,他是两块内存,但是f本身是Fu对象,他是无法访问到a=10的内存地址。你要是知道c里面的指针,你就知道其实就是指针的指向问题了。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-11-11
本事就存在矛盾

相当于 子类有 2个 int a = 10
int a = 5

应该是 根本 没有 重新赋值

子类的 构造方法 中 没有重新赋值 就用不到 子类的 a = 10了追问

肯定是赋值了。
如果子类有这段代码:
public void method()
{
System.out.println(this.a+"....."+super.a);
}
主函数调用后,会输出10.....5

相似回答