IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

[Question bête] Problème d'héritage et de cast


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    BiM
    BiM est déconnecté
    Expert confirmé
    Avatar de BiM
    Femme Profil pro
    Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
    Inscrit en
    Janvier 2005
    Messages
    7 796
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT

    Informations forums :
    Inscription : Janvier 2005
    Messages : 7 796
    Par défaut [Question bête] Problème d'héritage et de cast
    Bonjour,

    Je vais essayer de vous exposer mon probème simplement.

    Dans une classe Principale, je récupère un objet de type Mere via une méthode d'une autre classe Creatrice, mais je voudrais caster celui-ci de sorte à l'avoir de type Fille (Fille hérite de Mere) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public class Principale {
      public Principale() {
        Creatrice create = new Creatrice();
        Fille objetRecupere = (Fille)create.getAttribut();
        objetRecupere.setPere("Papa");
      } 
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public class Creatrice {
      private Mere attribut = null;
      public Creatrice() {
        this.attribut = "Maman";
      }
      public Mere getAttribut() {
        return this.attribut;
      }
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public class Mere {
      private String nomMere = null;
      private setMere(String nomMere) {
        this.nomPere = nomPere;
      } 
      private String getMere() {
        return this.nomMere;
      } 
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public class Fille extends Mere {
      private String nomPere = null;
      private void setPere(String nomPere) {
        this.nomPere = nomPere;
      } 
      private String getPere() {
        return this.nomPere;
      } 
    }
    Bien évidemment, l'utilisation est bien plus complexe qu'il n'en paraît. Dans ce cas, je ne pas modifier les classes :
    - Mere
    - Creatrice
    Et je peux modifier les classes :
    - Fille
    - Principale

    Avez-vous une idée de comment résoudre ce problème de cast ?
    Je pensais faire un constructeur de Fille auquel on passe en paramètre un objet Mere mais je ne dois pas dupliquer (ou en tout cas éviter) l'objet. Enfin bon je vois pas trop comment faire

  2. #2
    Membre émérite
    Profil pro
    Architecte technique
    Inscrit en
    Mars 2002
    Messages
    966
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mars 2002
    Messages : 966
    Par défaut
    Est-ce que Mere as besoin d'être une classe concréte ?

    Sinon tu fais ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     public interface Linked {
      void setPere(String nomPere);
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public abstract class Mere implements Linked {
      private String nomMere = null;
      private setMere(String nomMere) {
        this.nomPere = nomPere;
      }
     
      private String getMere() {
        return this.nomMere;
      }
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public class Fille extends Mere {
      private String nomPere = null;
     
      private void setPere(String nomPere) {
        this.nomPere = nomPere;
      }
     
      public String getPere() {
        return this.nomPere;
      }
    }

  3. #3
    BiM
    BiM est déconnecté
    Expert confirmé
    Avatar de BiM
    Femme Profil pro
    Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
    Inscrit en
    Janvier 2005
    Messages
    7 796
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT

    Informations forums :
    Inscription : Janvier 2005
    Messages : 7 796
    Par défaut
    Oui absolument, de toute façon je ne peux pas la modifier.

    Par contre je pourrais ajouter un constructeur dans Fille de cette manière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public Fille(Mere maman) {
      this = maman; //Ce qui est impossible à faire comme ceci... et autrement, est-ce possible ?
    }

  4. #4
    Membre émérite
    Profil pro
    Architecte technique
    Inscrit en
    Mars 2002
    Messages
    966
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mars 2002
    Messages : 966
    Par défaut
    Je ne vois pas en quoi ça éviterait le cast ?

    Le souci c'est que ta Factory te renvoie un classe générique et tu tu veux essayer d'accéder à une méthode de ta sous-classe.

  5. #5
    BiM
    BiM est déconnecté
    Expert confirmé
    Avatar de BiM
    Femme Profil pro
    Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
    Inscrit en
    Janvier 2005
    Messages
    7 796
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT

    Informations forums :
    Inscription : Janvier 2005
    Messages : 7 796
    Par défaut
    Je ne veux pas éviter le cast, je veux le faire justement ou trouver un moyen de le contourner.

  6. #6
    Membre émérite
    Profil pro
    Architecte technique
    Inscrit en
    Mars 2002
    Messages
    966
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mars 2002
    Messages : 966
    Par défaut
    Citation Envoyé par BiM
    Je ne veux pas éviter le cast, je veux le faire justement ou trouver un moyen de le contourner.
    Le comprend la différence entre "éviter le cast" et "trouver un moyen de le contourner" désolé.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. petite question sur l'héritage et les cast
    Par baedal dans le forum Langage
    Réponses: 3
    Dernier message: 29/02/2008, 00h48
  2. [MFC] Question bête sur les CListBox
    Par gwendo dans le forum MFC
    Réponses: 1
    Dernier message: 10/08/2005, 16h43
  3. Problème d'héritage d'une méthode protégée
    Par shenron666 dans le forum C++
    Réponses: 9
    Dernier message: 28/04/2005, 23h17
  4. [Ethereal] Questions et problèmes de connexion
    Par Nasky dans le forum Développement
    Réponses: 8
    Dernier message: 04/03/2005, 00h53
  5. Numéro auto ===== Question bête
    Par Nicos77 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 16/06/2003, 13h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo