日期:2014-05-20  浏览次数:20730 次

想破头啦,关于父类强转成子类的问题
Java code

public class Demo {

    public static void main(String[] args){
        Fu f = new Fu();
        Zi z =(Zi)Fu();
    }

}
class Fu{
    
}
class Zi extends Fu{
    
}


为什么这样就错误?而下面这样却可以
Java code

Element a = (Element) document.getElementsByTagName("a").item(0);//此处返回Node


Element 也是Node的子类,为什么他就可以强转呢?而上面就不行?

------解决方案--------------------
Element a = (Element) document.getElementsByTagName("a").item(0);//此处返回Node
我想,是应该你的 document.getElementsByTagName("a")返回是一个 Element数组,不用是 用Node类型引用指向 Element对象。所以可以安全强转到Element。

而你的 
Fu f = new Fu();
Zi z =(Zi)f;
这个会报错强制转型错误,除非 Fu f = new zi();或者new 一个zi的子类。这个时候你强制应该是没有问题的。