Partage
  • Partager sur Facebook
  • Partager sur Twitter

Le tag "super()

Dans quelle situation il est inutilisable ?

Sujet résolu
    30 juin 2020 à 23:12:50

    Bonjour tout le monde

    Depuis le cours sur OpenClassroom, j'ai vu :

    public decrisToi() {
        String str = super.decrisToi() + "text bla bla";
        // Le reste ne me pose pas de probleme
    }

    Du coup, quand on utilise "super" sur une méthode venant d'une classe mère, est-ce qu'on ne prend que le return de cette méthode ? Cela veut dire qu'un void n'aurait pas fonctionné ici ? Comment cela devrait fonctionner sur un static par exemple ?

    La méthode vient d'une autre class et retourne un String.

    Merci d'avance pour vos réponses ^^

    (Vous êtes les meilleurs)

    -
    Edité par ShayaJS 30 juin 2020 à 23:15:20

    • Partager sur Facebook
    • Partager sur Twitter

    [Lucas ESPINAR] -:- Shaya -:-

      1 juillet 2020 à 7:54:31

      Bonjour,

      J'ai du mal à comprendre tes questions, et je pense que c'est un peu confus pour toi, car tu n'utilises pas les bons termes.

      Quand on a une relation d'héritage entre deux classes, la classe fille hérite de toutes les méthodes de la classe mère. Si tu surcharges une méthode dans la classe fille, comme ici decrisToi, tu as maintenant deux méthodes avec le même nom.

      Pour appeler une méthode, la syntaxe est

      nomDObjet.nomDeMethode


      Pour appeler celle de la classe fille sur l'objet courant (this), on utilise this.decrisToi ou juste decrisToi (syntaxe raccourcie).

      Pour appeler celle de la classe mère sur l'objet courant (this), on utilise super.decrisToi.

      Ici, on peut dire que super représente l'objet courant limité à sa version "classe mère".

      Ca fonctionne exactement comme n'importe quelle autre méthode.

      Dans ton cas précis, cette méthode est appelée dans une expression. C'est sa valeur de retour qui va être utilisée pour calculer le résultat (str).

      Forcément, on ne peut pas utiliser une fonction qui ne retourne rien (void) dans une expression.

      Pour les méthodes statiques, on utilise juste le nom de la classe puisqu'elles ne sont pas liées à un objet.

      NomDeClasse.nomDeMethode




      • Partager sur Facebook
      • Partager sur Twitter
        1 juillet 2020 à 14:46:02

        Merci brubru777, effectivement, j'utilise pas bien les termes Java

        Ma question était pour un héritage mère-fille, je sais que pour hériter d'un constructeur ou d'une méthode de classe, on peut utiliser le tag "super()" et cela marche bien dans l'exemple où la méthode qui donne son héritage est public et typé (avec un return donc).

        Je voulais savoir comment marche exactement le fameux tag "super()" et si on pouvais utiliser l'héritage avec une méthode void dans le cas où on voudrais juste rajouter quelques trucs dans la méthode héritée.

         Donc, si je comprends bien, une méthode de la classe mère en void ne peut pas être donner d'héritage ... Okay

        Je te remercie @brubru777, car malgré tout, tu m'as certes ajouté des questions mais tu les as répondus en même temps (trop fort) ^^

        • Partager sur Facebook
        • Partager sur Twitter

        [Lucas ESPINAR] -:- Shaya -:-

          1 juillet 2020 à 16:37:11

          En fait, on peut tout à fait utiliser super avec une méthode void. Mais on ne peut pas l'appeler à un endroit où un résultat est attendu.
          • Partager sur Facebook
          • Partager sur Twitter
            1 juillet 2020 à 16:44:38

            Merci, brubru777

            Merci énormément pour tes réponses ^^

            -
            Edité par ShayaJS 1 juillet 2020 à 18:44:53

            • Partager sur Facebook
            • Partager sur Twitter

            [Lucas ESPINAR] -:- Shaya -:-

              1 juillet 2020 à 18:45:06

              Bonsoir,

              Pour te répondre rapidement, le tag super ne représente rien d'autre que le parent, tout comme this représente l'objet courant.

              Si tu veux voir le sujet plus "facilement" dit toi que chaque fois que tu appelles une méthode ou fonction tu appelles implicitement this

              private static class A{
              	public String getLabel()
              	{
              		return "A";
              	}
              }
              private static class B extends A{
              	@Override
              	public String getLabel() {
              		return "B";
              	}
              	public void decrisToi()
              	{
              		System.out.println(super.getLabel());
              		System.out.println(getLabel());//System.out.println(this.getLabel());
              	}
              }

              Dans cette exemple totalement inutile si tu t’intéresses à la méthode decrisToi() tu noteras qu'on appel deux fois getLabel(), le père et le fils.

              • Partager sur Facebook
              • Partager sur Twitter
              Un petit étudiant chinois perdu ^^'
                1 juillet 2020 à 20:02:43

                Merci Tats'Yako !

                Vous êtes tous les meilleurs. Je dormirai mieux ce soir xD

                Merci ^^

                • Partager sur Facebook
                • Partager sur Twitter

                [Lucas ESPINAR] -:- Shaya -:-

                Le tag "super()

                × 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