继承中子父类成员变量的内存简单图解
class Fu
{
int num=21;
}
//写一个子类
class Zi extends Fu
{
int num=23;
//show()
void show()
{
System.out.println("this.num:"+this.num+",super.num:"+super.num);//子类父类成员变量名相同
}
}
class ExtendsDemo2
{
publicstatic void main(String[]args)
{
Ziz=new Zi();
z.show();
}
}
继承中子父类成员变量的内存图解:
1, 划分栈,堆,方法区,空间。主函数进栈,变量z出现(如图1)。
2, 由于子类继承父类,子类要使用父类,父类需先进方法区。先加载父类,再加载子类(如图2)。
3, 接着开始执行newZi(),在堆里创建对象,划分空间地址(如图3)。
4, 子类继承了父类,父类是存储在子类里面的。这个时候子类一继承父类,父类变量就到了子类里面(如图4)。
5, 初始化完毕后,将0x0045赋给了z,z就指向了对象(如图5)。
6, 接着执行z.show(),show方法进栈,show里面有this,this拥有所属对象的地址值0x0045。
继续执行show里的方法,this.num,super.num。子类加载完成了有一个父类的引用super。
7.show弹栈,main弹栈。