问答详情
源自:10-2 多态中的引用类型转换

为什么强制转换的对象dog2不能打印出来呢

public class Initial2 {	
@SuppressWarnings("unused")	
public static void main(String[] args) {		
// TODO Auto-generated method stub		
Dog dog=new Dog();		
Animal animal=dog;//向上类型转换,隐式转换		
if(animal instanceof Dog){		
Dog dog2=(Dog)animal;//向下类型转换,强制类型转换		
System.out.println("Dog型转换成了Animal型了");		
}else{		
System.out.println("Dog型不能转换成Animal型");		
}		
if(animal instanceof Cat){			
Cat cat=(Cat)animal;		
}else{			
System.out.println("不能转换成Cat型");		
}								
System.out.println(dog);		
System.out.println(animal);		
System.out.println(dog2);//难道强制转换的对象不能打印					
}
}

https://img4.mukewang.com/5ca1572500015b1d09810348.jpg

提问者:慕无忌7406412 2019-04-01 08:12

个回答

  • 所念隔远乡
    2019-04-30 14:50:30
    已采纳

    dog2对象在if语句中,所以才打印不出来,有可能不执行

  • Viva啦啦啦Vida
    2019-05-29 18:16:33


    public static void main(String[] args) {

    // TODO Auto-generated method stub

    dog dog1=new dog();

    dog dog2=new dog();

    cat cat1=new cat();

     

    animal animal1=cat1;

    if(animal1 instanceof dog)

    {

    dog1=(dog)animal1;

    System.out.println("狗可以转化成动物类");

    }

    else

    {

    System.out.println("狗不可以转化成动物类");

    }

    if(animal1 instanceof cat)

    {

    cat1=(cat)animal1;

    System.out.println("猫可以转化成动物类");

    }

    else

    {

    System.out.println("猫不可以转化成动物类");

    }

    System.out.println(dog1);       

    System.out.println(animal1);    

    System.out.println(cat1);

    }

    }


  • 你的学长
    2019-05-26 15:55:12

    不是Dog型转换成了Animal型了
    是把Animal型强制转换成Dog型

    建议多看几遍

  • tiger爱小狄
    2019-04-30 15:00:39

    强制转换完的对象也是对象,当然可以打印。你的错误在于dog2在if{}里,外面取不到,

    把System.out.println(dog2);放在第9行就可以了

  • 金a静
    2019-04-01 22:17:58

    向下类型转换时容易出错,需要加instanceof可以防止转换出错。