[英]Implicit interface, class casting in JAVA
我正在學習JAVA程序員I證書,其中有一個我聽不懂的問題:
//Given:
interface I{}
class A implements I{}
class B extends A {}
class C extends B{}
//and
A a = new A();
B b = new B();
確定可以編譯並正確運行的選項。
A. a = (B)(I)b;
B. b = (B)(I)a;
C. a = (I)b;
D. I i = (C)a;
現在我知道答案是A),但我不明白,如果B類是A類的孩子,那么'a'可以等於'b'而無需強制轉換,為什么答案B)錯誤? 連鑄造(B)(I)意味着什么?
B擴展了A。因此您可以將B的實例強制轉換為A,但不能相反。 該代碼將編譯,但在運行時將引發ClassCastException。
嘗試強制轉換為后代類稱為向下轉換。 在這種情況下,強制轉換為“ I”可以編譯該代碼,但會引發ClassCastException。
父引用可用於保存子對象。 因此,下面所有都是正確的。
A a = new A(); B b = new B(); I i = new A(); a = new B(); b = new C();
下面試圖將對象強制轉換為不是實例的子類,因此下面將拋出CCE。
b = (B)(I)a; c = (C)(I)a;
您可以檢查與System.out.println(a instanceof C);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.