簡體   English   中英

隱式接口,JAVA中的類轉換

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

  1. 父引用可用於保存子對象。 因此,下面所有都是正確的。

     A a = new A(); B b = new B(); I i = new A(); a = new B(); b = new C(); 
  2. 下面試圖將對象強制轉換為不是實例的子類,因此下面將拋出CCE。

     b = (B)(I)a; c = (C)(I)a; 

    您可以檢查與System.out.println(a instanceof C);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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