簡體   English   中英

嘗試強制轉換子類時發生ClassCastException

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM