为了账号安全,请及时绑定邮箱和手机立即绑定

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

如果这样写:

Animal animal = new Animal();

Dog dog = (Dog)animal;

运行的时候会报错

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

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

正在回答

5 回答

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

0 回复 有任何疑惑可以回复我~
#1

慕尼黑2980719 提问者

非常感谢!
2016-08-09 回复 有任何疑惑可以回复我~
#2

慕尼黑2980719 提问者

刚刚也在书上看到了,如果试图把一个父类实例转换成子类类型,则这个对象必须实际上是子类实例才行,否则运行时会有异常。 所以如果animal实际指向的是dog,那它就能强制转换为Dog 如果animal指向的是Animal,那它强制转换成Dog之后,运行的时候会出错 即,以下转换是可以的: Animal animal = new Dog();//animal实际指向Dog Dog dog = (Dog)animal; 而以下转换是不行的: Animal animal = new Animal();//animal实际指向Animal Dog dog = (Dog)animal;
2016-08-09 回复 有任何疑惑可以回复我~

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 {

}


0 回复 有任何疑惑可以回复我~

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

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 {

}

}





0 回复 有任何疑惑可以回复我~

抱歉,我好像说错了,

0 回复 有任何疑惑可以回复我~

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

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

希望大家能一起讨论

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

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

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信