Java為什麼型別轉換只能向上不能向下?

時間 2021-06-07 04:02:28

1樓:子謙

型別不是隨意轉換的。

回答這個問題首先需要了解繼承,乙個類(class A)繼承另乙個類(class B),即:

public

class

Aclass

Bextends

A那麼,此時B物件會擁有A的物件的所有public,protect欄位和方法,再此基礎上,B可以增加自己獨有的方法和字段,或者重寫繼承自A的方法,因此,B物件可以向上轉換為A型別的物件,因為B拓展了A,A可以的B都可以。

但是A的物件是不可以向下轉換為B的,因為A沒有B獨有的那部分方法或者字段,但是這樣也不絕對,如果這個物件本來就是B的物件,由於某些原因需要他作為A的物件使用,把他轉換成A的物件了,在這種情況下,再把它變回來是沒有問題的。

那麼怎麼知道這個物件是不是B的物件?使用關鍵字instanceOf。if(

objinstanceofB)

那麼什麼時候會需要這樣做呢?

比如還有很多類繼承了A,你要根據某個標準決定建立的是具體那個類的物件,但是無論你建立的是啥,返回的型別就一種,A型別,那麼你在使用這種物件的時候就可以instanceof判斷建立的是誰,然後向下轉換。

當然,還有另一種轉換,具體類轉介面類,例如:

List

>list

=new

ArrayList

<>();

可以這樣做的原因是類實現了介面。

介面決定了類可以做什麼,會有哪些方法,類在實現介面的時候必須完成這些方法(除了抽象類),因此介面描述的特性類的物件將會全部擁有,所以可以這樣轉換。

2樓:McAce

簡單想想不就知道了,乙個A介面,BC分別是它的實現類且互相沒有關係,你可以說B、C是A,但你能說B是C或者C是B嗎,肯定不能

那現在有A b = new B;A c = new C;強制把B轉成C:(C)b,或是C轉成B:(B)c,肯定就不對了啊

另外你的問題表述不清,不太懂你在問什麼,我也隨便答答了

C double型別強制轉換int時,為什麼會有這樣的結果

補充一下 黃飛飛 的答案,double 型別的0.3的52位尾數恰好是 後面的 因為第53位是0都被捨去.所以實際的浮點表示比0.3小 lol就是那只熊貓 浮點型儲存的時候由於位數的原因會有精度損失,比如0.3在儲存的時候可能是0.29999999999999,也可能是0.3000000000000...

Java的泛型強制轉換中,下面例子為什麼只能有super

先生 R大其實說的相當清楚了。因為我也被這個問題困惑過一段時間。進一步結合題主的問題,舉個例子解釋說明下 首先有這樣乙個方法 public List produceFruit 呼叫這個方法 List collection fruitStore.produceFruit 上訴方法在呼叫的時候把supe...

戰機為什麼只能攜帶固定型別的飛彈?

60通 現在也在逐漸的,也在通一型號。現在還是大部分,因為飛彈的功能不同,所以大小和尺寸又不一樣,發射方式也不一樣,所以說,很難完全通用 小歲月太著急 聞道有先後,術業有專攻。有的戰機就是為了特定的攻擊目標而定位的,當然就會掛載相應的飛彈。飛彈發射架不同國家並不相容,不同型別的飛彈很多也不相容,飛機...