zoukankan      html  css  js  c++  java
  • Java父类与子类的内存引用讲解

    http://jseafly.blog.sohu.com/145651869.html

    http://blog.sina.com.cn/s/blog_5ddb672b0100jedt.html

     从对象的内存角度来理解试试.
    假设现在有一个父类Father,它里面的变量需要占用1M内存.有一个它的子类Son,它里面的变量需要占用0.5M内存.
    现在通过代码来看看内存的分配情况:
    Father f = new Father();//系统将分配1M内存.
    Son s = new Son();//系统将分配1.5M内存!因为子类中有一个隐藏的引用super会指向父类实例,所以在实例化子类之前会先实例化一个父类,也就是说会先执行父类的构造函数.由于s中包含了父类的实例,所以s可以调用父类的方法.
    Son s1 = s;//s1指向那1.5M的内存.
    Father f1 = (Father)s;//这时f1会指向那1.5M内存中的1M内存,即是说,f1只是指向了s中实例的父类实例对象,所以f1只能调用父类的方法(存储在1M内存中),而不能调用子类的方法(存储在0.5M内存中).
    Son s2 = (Son)f;//这句代码运行时会报ClassCastException.因为f中只有1M内存,而子类的引用都必须要有1.5M的内存,所以无法转换.
    Son s3 = (Son)f1;//这句可以通过运行,这时s3指向那1.5M的内存.由于f1是由s转换过来的,所以它是有1.5M的内存的,只是它指向的只有1M内存.

  • 相关阅读:
    Entity Framework 第十篇 条件查询
    Entity Framework 第九篇 关于自增列的事务处理
    Entity Framework 第八篇 结构优化
    Entity Framework 第七篇 简化排序
    控件截图Cache
    Java基础_自加运算
    Java基础_赋值运算
    Java基础_字符与字符串的运算
    同步和异步
    Application中的name属性
  • 原文地址:https://www.cnblogs.com/MR-Guo/p/3306539.html
Copyright © 2011-2022 走看看