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

教程中animal向dog的向下转换是不是一个特例?

如果这样写:

Animal animal = new Animal();

Dog dog = (Dog)animal;

运行的时候会报错

而教程的例子中是先创建dog,让animal指向它,再创建dog2的时候才能用(Dog)animal赋值。

所以教程中的例子是不是一个特例?一般情况下应该是不能将父类实例强制转换成子类引用的吧?

提问者:慕尼黑2980719 2016-07-18 11:14

个回答

  • 元素滴3579866
    2016-07-23 22:53:33
    已采纳

    你创建的是父类方法,你看看子类有多少个,系统无法识别指向哪一个,当然会报错,你下面说的不太理解,我查查看

  • 慕瓜7080925
    2016-07-24 08:43:33

    public class Demo{

    public static void main(String[] args) {

    Animal a=new Animal();

    a=new Cat();

    if(a instanceof Cat){

    Cat c=(Cat)a;

    c.test();

    }else {System.out.println("无法进行强制转换");

    }

    }

    }

    class Animal {

    public void test(){

    System.out.println("转换成功");

    }

    }

    class Cat extends Animal {

    }


  • 元素滴3579866
    2016-07-23 23:12:50

    我试了你说的父类引用指向子类的对象,结果转换成功,下面是我的代码

    package com.测试;

    public class Test {

    public static void main(String[] args) {

    // TODO Auto-generated method stub

    Animal a=new Cat();

    if(a instanceof Cat){

    Cat c=(Cat)a;

    c.test();

    }else System.out.println("无法进行强制转换");

    }


    class Animal {

    public void test(){

    System.out.println("转换成功");

    }


    class Cat extends Animal {

    }

    }





  • 元素滴3579866
    2016-07-23 23:06:44

    抱歉,我好像说错了,

  • 慕尼黑2980719
    2016-07-18 11:19:13

    好吧,也百度到了一些东西

    Java中父类强制转换成子类的原则:父类型的引用指向的是哪个子类的实例,就能转换成哪个子类的引用。

    希望大家能一起讨论