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

Flex Discussion :

Héritage de classe


Sujet :

Flex

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté Avatar de samy2525
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    259
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 259
    Par défaut Héritage de classe
    Bonjour tout le monde,

    j'ai une petite question de type programmation objet, donc voila c'est quoi la différence entre ces deux codes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    public class A extends B
    {
       public function A()
      {
    
      }
    }
    
    et
    
    public class A extends B
    {
       public function A()
      {
           super();
      }
    }
    à ma connaissance la deuxième, appelle le constructeur de la classe mère pour initialiser quelques attributs.

    En testant un héritage d'un DataGrid sans mettre le mot clé super () dans le constructeur de la sous classe, j'arrive comme même à rentrer dans le constructeur de la classe mère et initialiser la hauteur de la ligne .....


    voila si quelqu'un a une réponse je suis preneur

    Merci

    Samy

  2. #2
    Membre éprouvé
    Homme Profil pro
    Tech Lead
    Inscrit en
    Novembre 2006
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Tech Lead
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Novembre 2006
    Messages : 120
    Par défaut
    Hello,

    En effet tu as fais la bonne analyse.
    Quand tu fais hériter une classe à une autre, la classe enfant se retrouve dotée des attributs protected ou public de la classe parente ainsi que de son type:
    En prenant ton exemple, si tu fais une méthode qui réclame en param un objet de type A, tu peux également lui passer un type B puisque le type B est également un type A, mais attention l'inverse n'est pas vrai. Si tu fais une méthode qui réclame un type B tu ne peux pas lui passer un type A car A n'hérite pas de B...
    Mais ta classe enfant n'est pas obligée d'instancier la classe parente pour pouvoir fonctionner.
    Maintenant quand tu fais super(), c'est parce que tu n'es pas sensé savoir ce que fais le constructeur de l'objet parent (principe d'encapsulation). Il initialise certainement des propriétés qui sont utilisées au sein du framework... Tu n'es pas obligé de le faire mais il est recommandé de le faire. de la même manière quand tu fais un override de méthode, il est également recommandé de faire un appel à la méthode de la classe parente.

    Voilà j'espère avoir répondu à ta question.

  3. #3
    Membre expérimenté Avatar de samy2525
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    259
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 259
    Par défaut
    Bonjour, Merci pour cette réponse complète.

    Cependant mon interrogation portait sur le faite que sans mettre le mot clé super() dans le constructeur de la sous-classe j'arrive à rentrer dans le constructeur de la classe mère pour exécuter comme tu dis quelques actions qui initialisent quelques attribut ..........

    alors que normalement on ne doit pas rentrer dans le constructeur de la classe mère.

    Je ne sais pas si je suis claire ou pas je l'espere en tous les cas

    Merci

    Samy

  4. #4
    Membre émérite
    Homme Profil pro
    Consultant Angular / Java J2EE
    Inscrit en
    Novembre 2008
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Consultant Angular / Java J2EE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2008
    Messages : 545
    Par défaut
    Salut,
    Citation Envoyé par Maskime Voir le message
    En prenant ton exemple, si tu fais une méthode qui réclame en param un objet de type A, tu peux également lui passer un type B puisque le type B est également un type A, mais attention l'inverse n'est pas vrai. Si tu fais une méthode qui réclame un type B tu ne peux pas lui passer un type A car A n'hérite pas de B...
    N'aurais-tu pas inversé le A et le B justement ?

  5. #5
    Membre éprouvé
    Homme Profil pro
    Tech Lead
    Inscrit en
    Novembre 2006
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Tech Lead
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Novembre 2006
    Messages : 120
    Par défaut
    Citation Envoyé par Krazymins Voir le message
    Salut,

    N'aurais-tu pas inversé le A et le B justement ?
    Ouais je me rends compte en lisant le code posté que dans ma tête B héritait de A mais en fait c'est A qui hérite de B
    Donc reprendre mon explication en inversant A et B

  6. #6
    Rédacteur/Modérateur
    Avatar de beekeep
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    2 005
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 2 005
    Par défaut
    Bonjour à tous,

    Le constructeur de la classe de base est toujours exécuté, si super n'est pas appelé l'instruction est ajoutée (par le compilateur ?) au début du constructeur de la classe étendue.
    Donc le super peut servir à exécuter des instructions avant l'appel à super (qui est de toute façon appelé).

    Pour les méthodes c'est différents, on peut choisir de ne pas exécuter la méthode de la classe de base (par défaut) ou d'appeler super.maMethode().

  7. #7
    Membre expérimenté Avatar de samy2525
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    259
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 259
    Par défaut
    bonjour beekeep, merci pour ta réponse, la je comprends mieux pourquoi je rentre dans le constructeur de la classe de base sans le mot clé super, est il possible que ça soit une spécificité de flex ou bien le java .NET le font aussi


    merci encore pour tes précisions

    Samy

Discussions similaires

  1. conflit d'inclusions et Héritage de classe
    Par gedeon555 dans le forum C++
    Réponses: 7
    Dernier message: 01/10/2006, 19h48
  2. [POO] Problème héritage des classes PHP4
    Par zana74 dans le forum Langage
    Réponses: 2
    Dernier message: 15/08/2006, 16h00
  3. Héritage de classes.
    Par Berzerk_ dans le forum C++
    Réponses: 48
    Dernier message: 13/08/2006, 23h48
  4. [POO] Héritage vs classe dans une classe
    Par robichou dans le forum Langage
    Réponses: 4
    Dernier message: 06/08/2006, 23h51
  5. [OO] Héritage - Mixins Classes
    Par djmalo dans le forum Langages de programmation
    Réponses: 4
    Dernier message: 01/03/2005, 23h16

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