KimYDae 2022-10-30 11:45 采纳率: 83.5%
浏览 14
已结题

JAVA:有关父子类的属性空间问题


class A{
        int count = 6;
}
class B extends A{
        int count = 7;
}
public class Test{
         public static void main(String[] args){
               B b = new B();//创建完b对象后,b在内存中指向的空间只有属性count = 7,还是说空间有count = 7以及count = 6.
          }
}

当创建完b对象后,b在内存中指向的空间只有属性count = 7,还是说空间有count = 7以及count = 6?

img


就是老韩右上角的那个图,为什么s指向的空间有10还有20?

  • 写回答

2条回答 默认 最新

  • 涝山道士 2022-10-30 13:45
    关注

    Sub初始化的时候,会默认调用Base()的构造方法,即Sub会先初始化父类Base,然后初始化自身。

    • 在类文件结构中,Sub只有自身的属性,不过会有一个指向父类Base的索引,使得Sub可以通过该索引随时调用父类的方法和参数。
    • 在实例化对象时,初始化对象Sub,会划分两块内存区域,你可以把这两块内存简单理解为this和super,this区域的类指向Sub,super区域的类指向Base。

    在你的例子中,s = new Sub(),s可以同时调用this和super区域;而Base b = s, b 则指向的是super,只能调用super。所以s的内存空间中存在两个count值,即this.count = 7, super.count = 6,而b只存在一个值,即super.count = 6



    这些内容楼主想了解更详细的话,可以去看看《深入理解Java虚拟机》这本书

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 11月7日
  • 已采纳回答 10月30日
  • 创建了问题 10月30日

悬赏问题

  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分