Partage
  • Partager sur Facebook
  • Partager sur Twitter

Incompréhension sur le cours sur l'héritage

Sujet résolu
    24 août 2016 à 20:04:08

    Bonjour, il y a une partie que je ne comprend pas sur le cours de l'héritage, c'est juste une ligne mais j'arrive vraiment pas à voir d'où elle sort.

    public class Capitale extends Ville {
         
      private String monument;
        
      //Constructeur par défaut
      public Capitale(){
        //Ce mot clé appelle le constructeur de la classe mère
        super();
        monument = "aucun";
      }    
          
      //Constructeur d'initialisation de capitale
      public Capitale(String nom, int hab, String pays, String monument){
        super(nom, hab, pays);
        this.monument = monument;
      }    
         
      /**
        * Description d'une capitale
        * @return String retourne la description de l'objet
      */
      public String decrisToi(){
        String str = super.decrisToi() + "\n \t ==>>" + this.monument + "en est un monument";
    
        return str;
        } 
    
      /**
        * @return le nom du monument
      */
      public String getMonument() {
        return monument;
      } 
    
      //Définit le nom du monument
      public void setMonument(String monument) {
        this.monument = monument;
      }   
    }

    Pour être plus précis, il s'agit de cette ligne

     super(nom, hab, pays);

    Si j'ai bien compris, on appelle le constructeur de la classe mère avec super, et on y met en paramètres ces variables,  mais d'où sortent ces variables "nom" "pays" "hab" ? 

    Et surtout pourquoi appeler le constructeur de la classe mère, alors qu'on vient d'en créer un dans la classe fille ?


    • Partager sur Facebook
    • Partager sur Twitter
      24 août 2016 à 20:22:29

      Bonjour.

      Les variables sont des paramètres de ton constructeur.

      Le constructeur permet d'initialiser un objet.
      Toute classe possède au moins 1 constructeur, et il y a appel à au moins 1 constructeur lors d'un new.
      Il faut voir l'héritage (d'état) comme une imbrication d'objets : ici Capitale contiendra Ville. L'initialisation d'une Capitale demandera donc l'initialisation d'une Ville.

      • Partager sur Facebook
      • Partager sur Twitter
      Angular 2 est l'avenir, jQuery c'est de la merde !!! - Java 8 c'est l'an 2016+ (programmez en 1 ligne)
        24 août 2016 à 20:34:06

        Merci pour la réponse, donc il faut obligatoirement faire appel au constructeur de la classe Ville pour l'initialisation de l'objet Ville, et permettre l'initialisation de  l'objet capitale dans ce cas là?

        Ou ils sont indépendant.

        -
        Edité par ChevroiDev 24 août 2016 à 20:40:55

        • Partager sur Facebook
        • Partager sur Twitter
          24 août 2016 à 22:27:24

          Oui c'est obligatoire.

          Si super() n'est pas précisé, le compilateur l'ajoute automatiquement.

          La classe parente est toujours initialisée avant la classe fille (car la classe fille peut utiliser des données de la classe parente, qui doit donc être initialisée).

          • Partager sur Facebook
          • Partager sur Twitter
          Angular 2 est l'avenir, jQuery c'est de la merde !!! - Java 8 c'est l'an 2016+ (programmez en 1 ligne)
            24 août 2016 à 23:09:11

            D'accord je commence déjà à y voir plus clair.

            Que se serait il passé si on avait laissé les paramètres du constructeur Ville comme avant ? 

            public Ville(String pNom, int pNbre, String pPays)

            On aurait pas pu réutiliser les même paramètres pour le constructeur de Capitale ?

            Désolé pour toutes ces questions mais j'aime pas passer à la suite sans être sûr d'avoir bien compris le fonctionnement.

            Merci encore une fois.

            • Partager sur Facebook
            • Partager sur Twitter
              24 août 2016 à 23:39:04

              Je ne comprend pas bien le problème.

              Si c'est juste une histoire de paramètre, variable et appel à une méthode (ou constructeur) alors il n'y a rien de compliqué...
              Ton constructeur Capitale possèdes des paramètres.
              Ces paramètres sont réutilisés pour appeler le constructeur parent, mais tu aurais très bien pu utiliser en utiliser d'autres.
              Le constructeur parent possède les mêmes paramètres, mais ils auraient très bien pu être différents.

              • Partager sur Facebook
              • Partager sur Twitter
              Angular 2 est l'avenir, jQuery c'est de la merde !!! - Java 8 c'est l'an 2016+ (programmez en 1 ligne)
                25 août 2016 à 12:07:39

                C'est pas tout à fait ça mais merci, je vois déjà mieux le fonctionnement.

                Merci

                • Partager sur Facebook
                • Partager sur Twitter

                Incompréhension sur le cours sur l'héritage

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown