2 qq 33833831 qq_33833831 于 2016.01.29 09:49 提问

java初学者关于引用数据类型 强制转换的问题

class TestDemo7{
public static void main(String[] args) {
Animal a=new Dog("旺财",2);
System.out.println("名字:"+a.getName());
System.out.println("年龄:"+a.getAge());
a.eat();
Dog dog=(Dog) a;// 强转为Dog类型
dog.zuanHuoQuan();
System.out.println("_______________________________");

    a=new Cat("咪咪",3);//**此句有疑问**
    System.out.println("名字:"+a.getName());
    System.out.println("年龄:"+a.getAge());
    a.eat();
}

}

变量a已经被转换为 Dog类型

在创建Cat对象时 为何还是Animal类型?

4个回答

zrf1335348191
zrf1335348191   2016.01.29 13:05
已采纳

首先,你这句Animal a=new Dog("旺财",2);,获取到的a是Animal类型,
然后你进行Dog dog=(Dog) a;// 强转为Dog类型这句代码,只是说将a内容赋值给Dog类型的对象dog,a依旧是Animal对象啊
最后a=new Cat("咪咪",3);这句代码,是给a重新赋值,但是,a依旧是Animal对象啊,只是内容发生变化了而已

jk_wzw
jk_wzw   2016.01.29 10:06

a被强转只是赋值给dog,a本身又不变

rui888
rui888   Ds   Rxr 2016.01.29 10:20

你虽然装箱拆箱了,不过a 还 Animal

mlw519
mlw519   2016.01.29 10:42

这问题的关键在于
Dog dog=(Dog) a;// 强转为Dog类型
这句的意思是dog指向a时需要做类型强制转换,而a本身是不变的,也不可能变的。
如果Dog dog= a;这时会做类型检查,发现a不是Dog会通过不了,不可以赋值。
很明显Dog是继承Animal的 所以a instanceof Dog 是true,这样才支持声明的Animal a强转(Dog) a

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!