强制类型转换不能直接将父类对象转换为子类对象吗

来源:10-2 多态中的引用类型转换

_天微凉_

2015-02-22 20:26

在程序中,我将父类的对象强制转换为子类的对象,为什么会报错?既然是强制转换,本来就是从大类型到小类型的转换啊???

package com.imooc;

//学习多态

public class Initial {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		Dog dog = new Dog();
		Animal animal = dog;//自动类型提升 向上类型转换
		Animal animal2 = new Animal();
		Dog dog2 = (Dog)animal2;//向下类型转换 强制类型转换
//		Cat cat = (Cat)animal;
	}

}

运行结果:
Exception in thread "main" java.lang.ClassCastException: com.imooc.Animal cannot be cast to com.imooc.Dog
at com.imooc.Initial.main(Initial.java:22)


写回答 关注

3回答

  • qq_下一站有你_0
    2015-03-02 14:50:03
    已采纳

    不是你这个意思的,它原来是一只动物,你没说它是什么动物就强行转换成一只狗可以么?不可以!

    但是  如果 它原来就是一只狗的话

    Animal animal = new Dog();

    Dog dog2 = (Dog)animal;

    这样就不会报错了。

    _天微凉_

    非常感谢!

    2015-09-09 19:14:22

    共 1 条回复 >

  • 谢思宇啊丶
    2017-04-16 14:22:33

    Animal animal = new Dog();和 Dog animal = new Dog();除了不能引用子类独有的方法外,有区别吗?  Animal animal = new Dog();到底是怎样的意思?

    pickup...

    Animal animal = new Dog();//是创建了一个叫动物名称的引用对象和狗的实例对象,并匹配。 Dog animal = new Dog();//建议以后设变量名称精确点,这里只是创建了一个叫animal(建议改成dog)的狗的实例子对象。

    2018-09-15 02:31:58

    共 1 条回复 >

  • 慕娘5070732
    2016-05-25 15:12:19

    任何时候,将父类对象强制转换为子类对象,编译都能通过。这句话对吗?

Java入门第二季 升级版

课程升级!以终为始告别枯燥,在开发和重构中体会Java面向对象编程的奥妙

530559 学习 · 6091 问题

查看课程

相似问题