Typecasting un objet de classe parent-enfant
J'ai un malentendu à propos de typecasting en langage Java. Le problème, c'est ClassCastException. Par exemple, dans ce code, en supposant que l'Animal est la classe mère de la classe Chien,
Animal animal = new Animal(); Chien chien = (Chien) animal;
jette ClassCastException après l'exécution.
Cependant, bien que l'étude de android paquets, j'ai trouvé un exemple sur typecasting qui devrait jeter un ClassCastException, considérant que java exemple.
EditText editText = (EditText) findViewById(R. id.edit_message);
Dans ce code, findViewById méthode renvoie un Vue de la classe de l'objet, qui est l'un des super-classes de EditText de la classe.(à partir de android.vue.Vue android.widget de.EditText) Le code fonctionne très bien. Quelqu'un pourrait-il expliquer si j'ai fait une erreur ou comment cela se passe?
Merci d'avance.
polymorphism
tag, vous savez comment faire pour rechercher le concept sur ce site ou ailleurs. Sérieusement, c'est trop basique. Recherche avant de poster.La question n'est pas sur le polymorphisme mécanisme, je sais que l'exemple ne se composent de polymorphisme. La vraie question est à propos de la mise en œuvre android. Je sais pourquoi il donne l'exception et je vous demande de clarification de code android.
Il n'y a pas de "Android application". Le traitement d'un objet, comme son ancestrale parent est le cœur de polymorphisme, qui est l'aspect clé de la programmation orientée objet et, par conséquent, Java (et donc Android). Mon commentaire a essayé de vous dire, vous avez été trop rapide pour poster une telle question fondamentale qui aurait facilement pu être répondu à effectuer une recherche simple dans la ou de Google (ou de lecture developer.android.com en profondeur).
OriginalL'auteur mwb | 2014-08-07
Vous devez vous connecter pour publier un commentaire.
Une fois que vous créez un objet, vous ne pouvez pas modifier le type. C'est pourquoi vous ne pouvez pas lancer un Animal à un Chien.
Toutefois, si vous créez un objet d'une sous-classe, vous pouvez garder une référence dans une variable de la super-type de classe, et plus tard, vous pouvez le jeter à la sous-classe type.
Cela fonctionne :
Dans l'Android exemple, vous avez une disposition de ressources qui ressemble à ceci :
Cette définition sera la cause de Android pour créer une instance de
EditText
, et, par conséquent, vous pouvez lancer la vue retournée parfindViewById
àEditText
. Vous ne pouvez pas le jeter à l'autre tout ce qui n'est pas un super-type deEditText
.Non, dans l'Android exemple, Android instancie l'objet sur la base des définitions dans la mise en page xmls. Vous ne pouvez lancer à sa sous-type.
c'est donc un android fonctionnalité, non?
Vous devriez lire le polymorphisme et typecasting en java , il n'y a rien d'inhabituel se passe dans Android.
Dans ce cas particulier, Android ne l'instanciation, mais vous rencontrerez ce problème dans de nombreux orientée objet plateformes d'instancier des objets à partir de fichiers de définition.
OriginalL'auteur Eran
Fondamentalement, vous ne pouvez pas lancer une instance de la super-classe sous-classe parce que l'instance d'une sous-classe n'est pas encore connu. Upcasting est un moyen sûr d'éviter cette exception se passer, parce que nous sommes maintenant affaire polymorphisme de notre code.
Vous devez instance d'une sous-classe de première:
Nous ne pouvons cacher les méthodes de la classe Chien ne trouve pas à son parent de la classe Animal par un moulage de sa super-classe:
Alors vous pouvez abattu ce retour à votre sous-classe Chien parce que l'instance de sa sous-classe est déjà connu:
OriginalL'auteur Ritchie Borja
Vous pouvez essayer ceci:
Espère que cela aidera.
OriginalL'auteur Yash