Question

Je suis en train de faire quelque chose comme

class O has a child E

Je déclare la variable

O xyz = new E();

mais si je l'appelle xyz.method (), je ne peux appeler ceux dans les méthodes de la classe O, et non E de, donc je peux downcaster par

E xyz2 = (E) xyz;

Ma question est- Pouvez-vous faire cela sans déclarer une nouvelle variable? Quelque chose comme:

O xyz = new E();
xyz = (E) xyz; 

et maintenant je peux utiliser xyz.method () pour appeler les méthodes de E

Est-il possible de le faire en java?

Était-ce utile?

La solution

oui, vous pouvez downcaster

((E)xyz).method();

Autres conseils

Non, vous ne pouvez pas changer le type d'une variable après elle est déclarée.

Vous pouvez inline les typecasts, ce qui permet d'économiser de la frappe si vous devez seulement une fois baissés:

Number n = 1;
((Integer)n).someIntegerMethod();

Vous devriez probablement créer une nouvelle variable si vous devez le faire plus d'une fois, cependant. Le compilateur peut ou peut ne pas être assez intelligent pour optimiser ce bien autrement (et vous encourrait les frais généraux d'exécution de la coulée de classe répétée).

si la classe parente (O) a une xyz méthode aussi bien, vous pourriez l'appeler simplement

O xyz = new E();
xyz.method();   // E's xyz would be called

est polymorphisme

Vous ne pouvez pas le faire comme ceci:

O xyz = new E();
xyz = (E) xyz; 
xyx.someEMethod(); // compilation error

La raison en est que typecasts d'objets Java ne changent pas réellement de valeur. Au contraire, ils effectuent un contrôle de type contre le type réel de l'objet.

Vos code vérifie que la valeur de xyz est un E, mais affecte ensuite le résultat de l'arrière de typecast à xyz (deuxième déclaration), ainsi revenir transtypage ascendant à un O nouveau.

Cependant, vous pouvez faire ceci:

((E) xyx).someEMethod(); // fine

Les parenthèses autour de la typecast sont essentielles, parce que le « » l'opérateur a une priorité supérieure transtypage.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top