![](/img/trans.png)
[英]ClassCastException when trying to cast FrameLayout to subclass
[英]ClassCastException when trying to cast a subclass
我有以下代碼:
package Maven_test.Maven_project_test;
public class Test {
class A {
int i = 10;
}
class B extends A {
int j = 20;
}
class C extends B {
int k = 30;
}
public void pruebaJerarquia() {
A a = new B();
B b = (B) a;
C c = (C) b;
System.out.println(c.k);
}
}
我想知道為什么這行:
C c = (C) b;
執行程序時引發此異常:
Exception in thread "main" java.lang.ClassCastException:
Maven_test.Maven_project_test.Test$B cannot be cast to
Maven_test.Maven_project_test.Test$C
at Maven_test.Maven_project_test.Test.pruebaJerarquia(Test.java:21)
at Maven_test.Maven_project_test.App.main(App.java:10)
我認為這與向上轉換和向下轉換有關,但我不知道。 可能是因為“ b”指向“ a”,而“ C c =(C)b”意味着要強制轉換這樣的內容嗎?
C c = new A();
謝謝!
您正在創建一個類型B
對象。 根據您的類層次結構,每個B
對象也是A
,但不是C
現在讓我們看一下如何將對該B
對象的引用分配給各個變量:
Object o = new B(); // You can always assign references to an Object-typed variable.
A a = (A) o; // This works because the object is of type A.
B b = (B) o; // This works because the object is of type B.
C c = (C) o; // This does not work because the object is not of type C.
因為從理論上講B
可以是C
但不總是C
B b = new C ();
倒鑄不是一個好主意。 每次播放時,最好附上一張支票。
if ( b instanceof C) {
C c = (C) b;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.