对象转型的操作中,成员变量的变化过程

一个子类型的对象转型成父类,以及再次转回子类的过程中,对象的成员变量是如何变化的?

首先,验证代码如下:

<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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值