父类和子类之间的转换(百度)
来源:互联网 发布:c语言中合法的关键字 编辑:程序博客网 时间:2024/06/07 03:46
1.从对象的内存角度来理解.
假设现在有一个父类Father,它里面的变量需要占用1M内存.有一个它的子类Son,里面的变量需要占用0.5M内存.
现在通过代码来看看内存的分配情况:
2.f = new Father();//系统将分配1M内存.
Son s = new Son();//系统将分配1.5M内存!因为子类中有一个隐藏的引用super会指向父类实例,所以在实例化子类之前会先实例化一个父类,也就是说会先执行父类的构造函数.由于s中包含了父类的实例,所以s可以调用父类的方法.
3.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内存.
假设现在有一个父类Father,它里面的变量需要占用1M内存.有一个它的子类Son,里面的变量需要占用0.5M内存.
现在通过代码来看看内存的分配情况:
2.f = new Father();//系统将分配1M内存.
Son s = new Son();//系统将分配1.5M内存!因为子类中有一个隐藏的引用super会指向父类实例,所以在实例化子类之前会先实例化一个父类,也就是说会先执行父类的构造函数.由于s中包含了父类的实例,所以s可以调用父类的方法.
3.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内存.
阅读全文
0 0
- 父类和子类之间的转换(百度)
- 父类和子类之间的转换问题
- C++中子类和父类之间的相互转换
- C++父类和子类之间的转换
- 父类与子类之间的转换
- 父类与子类之间的转换
- 父类与子类之间的转换
- java继承、子类和父类之间转换
- 黑马程序员-Java中的子类和父类之间转换的一点心得。
- 在Java当中父类和子类之间的强制转换
- 关于java接口、父类子类之间调用和强制转换的关系
- Java子类与父类之间的对象转换
- 子类和父类的相互转换
- C++中子类和父类之间的相互转化
- 父类与子类之间变量和方法的调用
- Java中子类和父类之间的调用关系
- 【Java中子类和父类之间的调用关系】
- 父类与子类之间变量和方法的调用
- 二、Jmeter 后置处理器(BeanShell PostProcessor)
- C语言判断奇偶数
- Android自定义控件之下拉刷新加载更多
- 小程序 条件渲染
- hihocoder 1580 枚举+dp+RMQ
- 父类和子类之间的转换(百度)
- 我对_stdcall和_cdecl的一些了解
- ubuntu终端英文乱码问题
- Haproxy搭建web集群
- 《C++ Concurrency in Action》笔记17 promise
- 使用opencv读取一段视频并对视频进行canny边缘检测
- 算法系列__1__欧几里得算法求解最大公约数
- 简单的stream socket例子
- ubuntu 解决“无法获得锁 /var/lib/dpkg/lock -open (11:资源暂时不可用)”的方法