运行结果:
b
c
5
首先注意在子类Demo3中的 i 是从父类继承的i
i首先默认值为0-->显式初始化i=0;-->父类构造函数i=2-->在子类构造函数中i=5(对父类的 i 操作)
无论编译和运行,都参考左边Super(引用型变量所属的类)。
我如果在上面的Demo3中加入
int i=10;//子类的成员变量i
在堆内存中:
new Demo3("a");中的成员分两块:子类的i 和 从父类继承的 i//关于这一点 老毕在继承中提到过 即使是private也是
此时打印结果:
b
c
2
这时候在构造函数Demo3 的 i=5;是对子类成员变量i的赋值
而父类的成员变量i经过i=0(默认)-->i=0(显式)-->i=2
运用那个理论无论编译和运行,都参考左边Super(引用型变量所属的类)。作者: 胥文 时间: 2013-2-16 09:58
public class Super {
int i =0;
Super()
{
System.out.println("b");
i=2;
System.out.println(i);
}
}
public class Demo extends Super {
/**
* @param args
*/
Demo(String a)
{
System.out.println("c");
i=5;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Super d = new Demo("a");//对象一建立就初始化,就是调用构造函数,先是把2赋给i,然后把5赋给i,所以i的输出结果等于5
//输出的结果是b,2,c,5,从这个也可以看出赋值的过程
System.out.println(d.i);
}