這樣的向下轉型怎么不報運行時異常ClassCastException


在網上看到個XML列子程序,程序是可以運行的,這是程序中的一個方法片段
我的問題寫在了下面程序的注釋部分。第二個程序就是一個向下轉型的列子,但是卻報錯了。

class OutContent {
int m = 0;

public void output(NodeList nodeList) {
int size = nodeList.getLength();
for (int k = 0; k < size; k++) {
Node node = nodeList.item(k);
if (node.getNodeType() == Node.TEXT_NODE) {
                                //父類型Node強轉成子類型Text,怎么不報錯?
Text textNode = (Text) node;
String content = textNode.getWholeText();
m++;
System.out.print(content);
}
if (node.getNodeType() == Node.ELEMENT_NODE) {
                                //這里也是樣的問題
Element elementNode = (Element) node;
String name = elementNode.getNodeName();
System.out.print(name);
NodeList nodes = elementNode.getChildNodes();
output(nodes);
}
}
}


package com.test;

class A {

void aMthod() {

System.out.println("A method");

}

}

class B extends A {

void bMethod1() {

System.out.println("B method 1");

}

void bMethod2() {

System.out.println("B method 2");

}

}

public class C {

public static void main(String[] args) {
A a2 = new A();

B b2 = (B) a2; // 向下轉型,編譯無錯誤,運行時將出錯

b2.aMthod();

b2.bMethod1();

b2.bMethod2();

}

}

5 个解决方案

#1


在我印象中好像不能向下轉啊~~子類的成員會比父類多,向下轉的話空間不夠用,相當於把大的東西往小的容器里塞,肯定不行的。
應該是你上面代碼里的那個node引用本來就指的是轉完以后的對象吧?

#2


 Node node = nodeList.item(k);
這個方法返回的就是Node類型,不是其子類型

#3


方法定義: Node item(int index)

#4


Map get() { return new HashMap();}

(HashMap)get();

類似這種情況

#5


哦。原來如此。謝謝樓上的朋友

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
  © 2014-2022 ITdaan.com 联系我们: