对象转型的操作中,成员变量的变化过程
来源:互联网 发布:画晶胞的软件 编辑:程序博客网 时间:2024/05/22 00:42
一个子类型的对象转型成父类,以及再次转回子类的过程中,对象的成员变量是如何变化的?
首先,验证代码如下:
<span style="font-family:Microsoft YaHei;font-size:12px;"></span><p> class A</p><p>{int x = 1;}class B extends A{int x = 2;int y = 3;}class Test{public static void main(String[] args){B a = new B(); a.x++;a.y++;System.out.println(a.x+" "+a.y); //输出3 4,这没啥说的。</p><p>A b = a;System.out.println(b.x++);//这里输出了1,证明有了一个新的x,注意这里的“++”操作</p><span style="font-family:Microsoft YaHei;font-size:12px;"> B c = (B)b; System.out.println(c.x+" "+c.y);//证明最开始a对象里的x,y值并没有因为转型而消失 A d = c; System.out.println(d.x);//输出了2,证明无论是向上转型还是向下转型都不会造成成员变量“丢失”。</span><pre name="code" class="java"><span style="font-family:Microsoft YaHei;font-size:12px;"> }</span>
<span style="font-family:Microsoft YaHei;font-size:12px;">}</span>于是,成员变量传递的过程就很明显了,A b = a ; 这条代码,并不是改变了原本对象的x值,而是新增了一个x值,换句话说,这条代码就是给对象新开辟了一部分空间,专门放新加入进来的A类定义的成员变量,各存各的。
而考虑到后面的B c = (B)b ; 及其之后的运行结果,这里我暂且用这样一种说法:
一个对象不只能存它的声明类所定义的成员变量,还可以存储这个类所有超类定义的成员变量,后者会在对象转型时生效,而这些成员变量互不影响。
eg.拿学生和人做个例子
人出生年龄0岁,学生上小学年龄6岁,一个学生对象a,他的年龄变量初始化为6,并一年年学业,长到了9岁,这时把这个学生向上转型成一个普通的人,就有了新的年龄属性,初始化为0,如果有必要,这个年龄可以再设成9,就算没有必要,如果之后他又被转型回学生,他的年龄也还是9。
换句话说,对象的属性不一定都是真实有效的,尤其是转型之后的新的成员变量,但就有的成员变量并没有丢失,所以对实际运行影响不大。
0 0
- 对象转型的操作中,成员变量的变化过程
- 上转型对象的成员变量和成员方法的调用
- Java中成员变量的初始化过程
- 重写——上转型对象不能操作子类新增成员变量和方法但可以操作子类继承和重写的方法
- Java--子类与继承,instanceof运算符,成员变量的的隐藏,方法重写,对象的上转型对象
- 类加载过程中静态变量的值变化细节
- 通过操作地址的方法来访问C++类对象中私有成员变量
- 向上转型子类的成员变量的调用
- 类中成员变量与类对象中成员变量的关系
- JAVA程序运行过程中成员变量的执行顺序
- Java中对象的上转型对象
- Java中 对象的上转型对象
- java中对象多态时成员变量,普通成员函数及静态成员函数的调用情况
- 类的成员变量,对象,静态变量
- 访问C++类对象中私有成员变量的方法
- 面向对象_继承中成员变量的关系
- 对象调用成员的过程
- C++在类的成员函数中,允许直接访问该类的成员对象的私有成员变量
- oracle11g安装问题小结
- Android 4.4拨号,短信,联系人源码修改(一)
- 大数据时代的产品,从包装推广到产品的盈利,点子为王,谁都可以是你的研发经理!
- eclipse中格式化代码快捷键Ctrl+Shift+F失效的解决办法
- 宏锦软件2015年的计划
- 对象转型的操作中,成员变量的变化过程
- LeetCode(171) Excel Sheet Column Number
- 各种音视频编解码学习详解 h264 ,mpeg4 ,aac 等所有音视频格式
- 专心写即时通讯软件争取CSDN认证专家
- Java输出竖排文字
- 解决一例R9 280X运行DX11游戏死机的问题
- 枚举类的常量定义
- 《局域网聊天——Android》
- file结构体详解