2010-03-27 2 views
1

Pourquoi est-ce que les types de données primitifs peuvent être upcasted alors que le même ne peut pas être fait avec leurs classes wrapper correspondantes?classes upcasting et wrapper

Répondre

2

Bien que la syntaxe soit la même, le lancement d'une primitive est quelque chose de très différent de la diffusion d'une référence.

+1

Exactement. J'ajouterais "Ce n'est pas" upcasting ". Il s'élargit. " En supposant que l'interprétation omniprésente de cette question est exacte. –

3

Parce que ni Byte ni Integer Hériter de Long et Float ne possèdes pas de Double.

0

Parce que Long ne s'étend pas à partir de Integer par exemple. Ils peuvent tous être convertis en nombre ...

4

Les types de données primitifs correspondent à un mode particulier de stockage des données dans la mémoire. Par exemple, un double et un int sont stockés très différemment en mémoire, et pour passer d'un double à un int implique de changer la stratégie utilisée pour stocker ces données (d'une version qui stocke des informations décimales à une version qui ne le fait pas).

L'upcasting des classes wrapper est une sorte de upcasting différent. Dans ce cas, vous modifiez le type dans lequel la classe wrapper est traitée. Pour continuer l'exemple, les classes wrapper Integer et Double sont des sous-classes de Number, sur lesquelles les deux wrappers peuvent être mis à jour. Cependant, Double n'est pas une sous-classe de Integer. Au contraire, ils sont frères et sœurs (c'est-à-dire, tous deux étendent Number). Ainsi, vous ne pouvez pas passer de Double à Integer.