Partage
  • Partager sur Facebook
  • Partager sur Twitter

Question cours Java de Cyrille Herby : l'héritage

Sujet résolu
    19 janvier 2019 à 22:21:55

    Salut,

    Je suis entrain d'apprendre le Java et la POO par l'intermédiaire du cours de Cyrille Herby. Jusque là, j'ai pas trop de problème, et là j'en suis à la parti sur l'héritage.

    Par ici : https://openclassrooms.com/fr/courses/26832-apprenez-a-programmer-en-java/21424-lheritage#/id/r-2181174

    Enfaîte, je cherche à comprendre l'interết du mot-clé "super". Dans le cours, il nous dit que super() appel le constructeur par défaut de l'objet "Ville". Sauf que, que je mette le mot clé "super()" ou non, ça ne change absolument rien enfaîte. J'ai l'impression qu'il y a un "super()" qui se fait de manière caché automatiquement.

    Je vous montre le code que j'utilise pour tester :

    Class Ville

     public Ville(){
            nbreInstances++;
            nbreInstancesBis++;
    
            System.out.println("Création d'une ville...");
            nomVille = "Inconnu";
            nomPays = "Inconnu";
            nbreHabitants = 0;
            this.setCategorie();
        }

    Class Capital

    package com.poo.test;
    
    public class Capitale extends Ville {
        private String monument;
    
        public Capitale() {
            System.out.println("Création d'une Capital...");
        }
    }

    Class Main

            Capitale cap = new Capitale();
            System.out.println(cap.description());
    Création d'une ville...
    Création d'une Capital...
    Inconnu est une ville de Inconnu, elle comporte 0 habitants, elle est donc de catégorie : ?.
    
    Process finished with exit code 0

    Car pour moi, de ce que je comprend, si on utilise pas le mot clé "super", on ne récupère pas tout ce qu'il y a dans le constructeur de base de "Ville" et donc, "Création d'une ville..." ne doit pas s'afficher sans ce mot clé. Or, on voit bien qu'il s'affiche alors qu'il n'y a aucun "super" dans la classe Capital.

    A savoir que j'utilise Java 11 (le cours a l'air pas mis à jours, mais je suppose que les concepts de POO reste les même), il y a peut-être eu des changements sur ce principe entre temps ? Ou bien c'est moi qui n'ai pas compris ?

    M'bref, merci !

    -
    Edité par LordHawk 19 janvier 2019 à 22:22:50

    • Partager sur Facebook
    • Partager sur Twitter
      20 janvier 2019 à 6:56:02

      Bonjour,

      L'appel à super() est facultatif. Si tu ne le mets pas, Java l'insère automatiquement.

      super est surtout utile quand on veut utiliser un constructeur avec des paramètres.

      Un exemple, quand tu veux définir des exceptions personnalisées.

      public ExceptionPerso extends RuntimeException {
      
          public ExceptionPerso() {}
      
          public ExceptionPerso(String message) {
              super(message);
          }
      
      }

      Note que super n'est pas obligé d'avoir les mêmes arguments que le constructeur qui l'appelle.

      public abstract Animal {
          private int nbPattes;
          private int nbAiles;
      
          public Animal(int nbPattes, int nbAiles) {
              this.nbPattes = nbPattes;
              this.nbAiles = nbAiles;
          }
      }
      
      public Chien extends Animal {
          public Chien() {
              super(4, 0);
          }
      }
      
      public Poule extends Animal {
          public Poule() {
              super(2, 2);
          }
      }
      
      



      -
      Edité par brubru777 20 janvier 2019 à 6:57:28

      • Partager sur Facebook
      • Partager sur Twitter
        22 janvier 2019 à 12:20:02

        Salut !

        Super, merci de ta réponse, je comprend mieux maintenant :)

        • Partager sur Facebook
        • Partager sur Twitter

        Question cours Java de Cyrille Herby : 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