非静态成员要想被调用需要在堆内存中有所属的地址空间,而子类继承父类之后,父类的成员被封装到了子类中,作为了子类的成员。当子类创建对象的时候,会开辟空间,得到地址,该地址可以指向子类的成员。因为父类的成员被继承下来之后作为了子类的成员,所以子类的地址可以指向父类的成员。而虚拟机调用子类的构造方法时会首先初始化父类,调用父类的构造方法。因为此时已经有地址可以指向父类的成员,所以没必要再创建新地址,所以不会开辟新的空间,仅仅是初始化。因此使用子类的this即可指向父类的成员。而super本身就只能指向父类的成员,此时父类的成员在子类的堆内存空间中,所以super指向了子类对象。所以说super和this指向了同一对象。因此可以得出结论:this.hashCode()==super.hashCode(),也就是说this和super的地址是一样的。
评论