通过上文的描述,我们可以画出代码的内存使用情况,通过内存使用情况,反过来,我们能够清楚的了解程序的运行,直接上图:
本图画的是上文的代码,执行代码:Hero heroDfs = new Hero("甘道夫","暴风雪","大法师",14,450);
根据上文初始化顺序,我们清楚的知道,语句创建了Object,GameObject,Creature和Hero四个对象,Object是基类对象,这个上文也描述过了。对于属性mc的隐藏,我们也可以清晰的看出在hero对象中存储的是圣骑士,在Creature中存储的是大法师。这也说明了父类对象也是独立存在的,只不过对子类而言是隐藏了。
this和super
每个方法都有两个隐性参数:this和super。
构造器中的this表示当前正在初始化的对象引用,方法中的this表示当前正在调用此方法的对象引用。
super是直接父类对象的引用。可以通过super来访问父类中被子类覆盖的方法或属性。
普通方法:没有顺序限制,可以随便调用;
构造方法:任何类的构造函数中,若是构造函数的第一行代码没有显示的调用super(...),那么Java默认都会调用super();作为父类的初始化函数。所以你这里的super();加不加都无所谓。