两个对象的内存调用
调用的步骤跟第一个对象的调用是一样的,执行到第二个对象的时候就跟第一个是一样的。
这里的showAge 调用的stu是student的类的引用,这里比C++优化了,C++如果不加引用&符号的话,它是采用一个对象的复本极其占用内存,但是JAVA里直接用的是引用,采用指针调用数据,很香!!!
其中Student类中的study方法内置已有姓名的,所以不需要从方法外取用值张三丰。小黑是局部变量,张三丰是成员变量。小黑的储存在栈区,随着方法消失而消失,张三丰储存在堆区,随着类的消亡而失去。
第一行代码初始化完毕
子类中的有颜色就近直接给子类附上红色,
子类的eat方法中还有赋值,将子类的颜色赋给父类的颜色。
为什么要先初始化父类呢?因为先定义子类的对象,进入子类后,发现没有父类,然后在方法区就压入父类,然后在压入子类。
多态类的内存图:
第一部分内存调用是跟继承类的结果差不多的。都先初始化,从方法区指向堆区开辟初始化数据
第二部分:
当执行到a.eat()方法的这一行的时候,找到堆中的基类中方法的地址0x066,然后到方法区0x066去执行,但是其中基类的方法被子类的方法重写了,存在一个虚拟方法表,会调用子类的方法。