博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java中父类对象引用指向子类对象
阅读量:7122 次
发布时间:2019-06-28

本文共 801 字,大约阅读时间需要 2 分钟。

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内存.

4.static 顾名思义,就是静态的,他是方法的,他属于这个类,由于是类的方法,他可以直接引用类名来引用方法,也可以通过类的对象来引用这个方法,他既不能被子类覆盖,也不能被子类继承。简单的说,他是在编译的时候就和类帮定在一起了,不能被运行时动态加载。

对子类与父类的static问题

——没覆盖也没继承,子类存有指向父类的引用

对于private

——该方法或属性只能在该类内使用

转载于:https://www.cnblogs.com/langshao/p/6709966.html

你可能感兴趣的文章
yii2有了一个js端的urlManager扩展了
查看>>
PHP命令行下的世界
查看>>
Docker多容器连接-以Nginx+PHP为例
查看>>
node.js http.serverResponse
查看>>
让我们聊聊脑裂这事情
查看>>
入侵检测 - AIDE高级入侵检测平台
查看>>
Getting unknown property: yii\db\ActiveQuery::name
查看>>
CentOS 6.5 双网卡配置一个上外网一个接局域网
查看>>
linux手动释放cached内存
查看>>
链表的基本操作
查看>>
arm-2009q1-203-arm-none-linux-gnueabi 安装
查看>>
Spring中的统一异常处理方式
查看>>
wemall 2.0 beta 公测版
查看>>
Mac别名以及自定义命令
查看>>
UIButton扩大响应区域
查看>>
scp详解
查看>>
SpringMVC的请求
查看>>
Hibernate学习笔记第一天 带Hibernate4架包
查看>>
hibernate一些方法的运用
查看>>
sublimetext编译Lua的配置
查看>>