记一次java使用多态的对象内存分析

记一次java使用多态的对象内存分析

记一次java使用多态的对象内存分析

最近使用aop参数列表替换参数,涉及了使用多态,好久没复习基础,乍一看没看明白,记录下来

基类

记一次java使用多态的对象内存分析

子类

记一次java使用多态的对象内存分析

方法:

记一次java使用多态的对象内存分析

打印结果

记一次java使用多态的对象内存分析

知识要点:

Java中的对象进行类型提升,依然保持其原有的类型。子类强转父类,其实仍然是子类。

内存变化:

第一步(图中红圈1):

记一次java使用多态的对象内存分析

第二步(图中红圈2):

记一次java使用多态的对象内存分析

第三步(图中红圈3):

记一次java使用多态的对象内存分析

第四步(图中红圈4):

记一次java使用多态的对象内存分析

第五步(图中红圈5):

记一次java使用多态的对象内存分析

第六步(图中红圈6)虽然替换了数组位置,但是真实引用还是原对象0x1021

总结:经过一顿操作之后,发现数组里面的引用还是一开始的那个,只是通过调用父类方法,将userId这个属性赋值进去了,所以在最后是可以通过子类打印出userId的。