Bruno Desthuilliers wrote:
Jérémie a écrit :
Bonjour à tous,
Mon post sera peut-être plus pertinent sur un espace Java, je m''excuse si
c'est le cas.
Ma question est : Lors de la conversion d'un objet en un autre objet (cast),
Lors de la conversion d'une variable d'un type en un autre type... Ca n'implique pas forcément de modification de l'"objet" (en tant que structure de donnée stockée en mémoire) lui-même.
celle -ci ne
peut-elle se faire que dans le sens "généralisation", ou bien bien aussi
dans le sens "spécialisation" ?
Effectivement, ta question serait plus à sa place sur fr.comp.lang.java.
Et pourquoi ?, le downcasting existe aussi en C++ avec le dynamic_cast.
Voir :
http://www.objectfaq.com/oofaq2/body/langspec.htm pour une explication en C++ et en Java.
Le downcasting n'est pas une conversion, c'est seulement une promesse faite au compilateur que l'objet "downcasté" est bien de la "bonne sous-classe".
Souvent (mais pas toujours), le fait d'être obligé, à un moment donné, d'utiliser le downcasting, révèle une faiblesse de conception...
Jacti
<HS mode="reprenez-moi si je dis une couennerie">
Tu peux caster vers une sous-classe, *à condition* que l'objet référencé par ta variable soit bien en réalité une instance de cette sous-classe (ce qui peut sembler logique...).
// nb : plus très sûr de la syntaxe exacte
class Foo {
//
}
class Bar extend Foo {
//
}
class Bak extend Foo {
//
}
class Baaz extend Foo {
//
}
// dans le main:
Foo real_foo = new Foo();
Foo some_bar = new Bar();
Foo some_bak = new Bak();
Foo some_baaz = new Baaz();
Bar test = (Bar) some_bar; // ok
test = (Bar) some_bak; // ok
test = (Bar) real_foo; // PAS ok
test = (Bar) some_baaz; // PAS ok
</HS>