Casting sous-classes extension de la même classe d'origine
Comment puis-je lance deux s'étend de la classe comme ça en java?
class B extends Object{
}
class C extends Object{
}
B b = new B();
C c = (C)b;//Cannot cast from B to C
OriginalL'auteur MUH Mobile Inc. | 2010-09-26
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas. Envisager une légère renommer:
Tous les deux, cependant, une Voiture de sorte que vous pouvez dire
mais pas plus que ça.
il charlatans comme une voiture...
OriginalL'auteur Thorbjørn Ravn Andersen
Le plus proche, vous pouvez venir est d'utiliser des interfaces
Comme d'autres l'ont indiqué, vous ne pouvez pas faire ce que vous êtes en train d'essayer avec juste les classes.
OriginalL'auteur hvgotcodes
Vous ne pouvez pas lancer un objet
B
àC
, parce queB
n'est pas unC
, le meilleur que vous pouvez déduire est que c'est uneObject
. Voici une autre analogie:Dire que vous avez:
OriginalL'auteur NullUserException
Vous ne pouvez pas le faire car
b
n'est pas une instance de la classe C. Il est seulement possible de jeter un objet dans une super-classe ou d'une super-interface.OriginalL'auteur Jcs
Vous catégoriquement ne peut pas le faire. Vous ne pouvez en fonte si le type à qui vous êtes casting représente en fait la généalogie de la cible. Dans ce cas,
B
n'est tout simplement pas une instance deC
(et vice versa). La vraie question est, pourquoi voudriez-vous? Et qu'êtes-vous réellement accomplir?OriginalL'auteur Kirk Woll
Dans le code de la classe
B
et de la classeC
ne sont pas dans un "est-un" de la relation, de sorte qu'ils ne peuvent pas être castée les uns aux autres.La seule chose qui
B
etC
a en commun, c'est qu'ils sont tous les deux des sous-classes deObject
, par conséquent, ils peuvent à la fois être utilisé pourObject
. Dans otherwords,B
est-Object
etC
est -Object
:Comme un contre-exemple de ce qu'on fait, imaginez ce cas:
Dans ce cas, qu'est-ce que le code suivant censé faire?
Depuis les objets faits à partir de la classe
C
n'ont pas dedoSomething
méthode, quel serait-il?Il peut être vu que juste parce que
B
etC
ont un ancêtre commun ne signifie pas qu'ils peuvent être interchangeables les uns avec les autres.Donc, ce qui est tenté dans le code ci-dessus ne peut pas être effectuée.
OriginalL'auteur coobird
mais...donnant cette hiérarchie
class X {}
class Z extends X{}
class Y extends X{}
X z = new Z();
X y = new Y();
Z y2 =(Z)y;
Pourquoi est-alloweb par le compilateur de la coulée entre Z et Y? Il fonctionne pas lors de l'exécution de toute évidence cos Z n'est pas un Y.
OriginalL'auteur silvia Dominguez