标题: 父子类中的同名变量问题 [打印本页] 作者: 游兴钟 时间: 2012-4-11 02:04 标题: 父子类中的同名变量问题 class Super
{
int i=0;
public Super(String a)
{
System.out.println("A");
i=1;
}
public Super()
{
System.out.println("B");
i+=2;
}
}
class Demo extends Super
{
public Demo(String a)
{
//super();
System.out.println("C");
i=5;
}
public static void main(String[] args)
{
int i=4;
Super d=new Demo("A");
System.out.println(d.i);
}
}
这个d.i为什么没有指向父类中的i ?
在整个过程中i在内存中式个怎样的演变过程呢?作者: 未长法 时间: 2012-4-11 08:20
在主函数里面,首先Super d=new Demo("A"); 调用子类的构造函数 Demo(String a ) 在调用子类的这个够好函数的时候在首行默认的有super()调用父类的空构造函数,所以先打印B i 的默认值是0 执行完i =i+2 后i=2,然后打印C 这时i=5覆盖了前面的i=2 ,此时i=5.
Super d=new Demo("A")子类对象被父类引用:子类对象在向上转型.编译时看左边,运行时看右边,所以d.i 输出的是子类的i 也l就是i=5.
因此输出结果是:
B
C
5 作者: 孙国军 时间: 2012-4-11 09:11
1.因为子类构造函数的第一行如果没有使用this或者super指定引用的构造函数,就会在第一行默认添加super(),调用父类中的空参数构造函数,
public Super()
{
System.out.println("B");
i+=2;
}
输出B i=2,
2. System.out.println("C");
i=5;
打印C i从新赋值为5