慕尼黑2980719
2016-07-18 11:14
如果这样写:
Animal animal = new Animal();
Dog dog = (Dog)animal;
运行的时候会报错
而教程的例子中是先创建dog,让animal指向它,再创建dog2的时候才能用(Dog)animal赋值。
所以教程中的例子是不是一个特例?一般情况下应该是不能将父类实例强制转换成子类引用的吧?
你创建的是父类方法,你看看子类有多少个,系统无法识别指向哪一个,当然会报错,你下面说的不太理解,我查查看
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 {
}
我试了你说的父类引用指向子类的对象,结果转换成功,下面是我的代码
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 {
}
}
抱歉,我好像说错了,
好吧,也百度到了一些东西
Java中父类强制转换成子类的原则:父类型的引用指向的是哪个子类的实例,就能转换成哪个子类的引用。
希望大家能一起讨论
Java入门第二季 升级版
530803 学习 · 6091 问题
相似问题