2010-05-21 83 views
2

您認爲Java中的自動裝箱是一種多態嗎?換句話說,你認爲自動裝箱擴展了Java的多態功能嗎?多態性,自動裝箱和隱式轉換

Scala中的隱式轉換怎麼樣?

我認爲他們都是多態性的例子。這兩個功能都允許以統一的方式處理不同數據類型的值。

我的同事不同意我的看法。誰是對的?

+0

也許它們在單詞的真正意義上是多態的:multi(poly)-formed(morph),因爲它們可以以不同的形式出現。但在編程方面,這不是多態... Matthieu是對的:) – Simon 2010-05-21 16:26:06

回答

7

Wikipedia

亞型多態性,幾乎 普遍稱爲只是多態性 在面向對象的 編程的上下文中,是一個 型,A,的顯示爲和類似的被使用的能力 另一種類型,B。

Scala中的隱式轉換是轉換。一個對象被轉換爲另一個對象。

自動裝箱是創建一個對象(同樣是一個轉換)。

因此,這些不是多態。

+1

+1界面不能改變,界面的契約實現爲多態。 – 2010-05-21 16:27:02

1

我個人認爲自動裝箱是一種有時會出乎意料的結果。

Boolean b = null; 
boolean b2 = b; // oops 

自動裝箱的棘手的部分是,它不是一個真正的鑄件,其中(僅)改變類型,但以上的值的轉換。

+1

您可以設置幾乎任何優秀的Java IDE來突出顯示自動拆箱的情況(自動裝箱總是安全的,您的示例是關於反向轉換)。 – 2010-05-22 08:15:29