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 :

Appel implicite à un super-constructeur


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif

    Homme Profil pro
    Hobbyiste
    Inscrit en
    Juillet 2018
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Hobbyiste

    Informations forums :
    Inscription : Juillet 2018
    Messages : 129
    Billets dans le blog
    1
    Par défaut Appel implicite à un super-constructeur
    Bonjour,

    Je ne comprends pas la trace d’exécution du code. J'ai fait quelques modification dans une classe parente.

    Si j'ai un constructeur par défaut dans la classe parente (sans argument) est-ce qu'il est automatiquement appelé par les constructeurs des classes descendantes?

    Est-ce une nouveauté ? Ou est-ce que ça a toujours existé ? J'utilise Java 8 actuellement. C'est une question très simple mais je m'étonne d'être dans la certitude que non alors qu'on me dit le contraire.

  2. #2
    Membre très actif

    Homme Profil pro
    Hobbyiste
    Inscrit en
    Juillet 2018
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Hobbyiste

    Informations forums :
    Inscription : Juillet 2018
    Messages : 129
    Billets dans le blog
    1
    Par défaut
    Vous pourriez m'aider j'ai du retard sur la SuperNes...

  3. #3
    Membre émérite Avatar de Cincinnatus
    Homme Profil pro
    Développeur d'applications métier
    Inscrit en
    Mars 2007
    Messages
    593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur d'applications métier
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2007
    Messages : 593
    Par défaut
    Citation Envoyé par DaTheWolf Voir le message
    Je ne comprends pas la trace d’exécution du code.
    Pas mieux. Mais bon, faudrait la voir cette trace d'exécution (et le code).

  4. #4
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 104
    Par défaut
    Ben suffit d'essayer pour s'en convaincre :

    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
    18
    19
    public class classeparente
    {
     
     
    	public classeparente()
    	{
    		System.err.println("Parente");
    	}
     
    	/**
             * @param args
             */
    	public static void main(String[] args)
    	{
    		new classefille("TOTO");
     
    	}
     
    }
    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
    public class classefille extends classeparente
    {
     
    	public classefille()
    	{
    		System.err.println("Fille");
    	}
     
    	/**
             * @param string
             */
    	public classefille(String string)
    	{
    		System.err.println("Fille");
    	}
    }
    (Qu'est-ce que la SuperNes vient faire la dedans ???)
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 585
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 585
    Par défaut
    Et, non, ce n'est pas nouveau, ça a toujours été comme ça.

    D'un point de vue cohérence, il devrait sembler évident que quand on cherche à construire un objet d'une sous-classe, on doit d'abord faire la construction habituelle des classes ascendantes. Sinon elles ne pourront pas faire le travail que leurs descendantes attendent d'elles.

    Du coup, ce n'est pas tellement que "quand on crée un constructeur par défaut dans les classes ascendantes, il est implicitement appelé".
    C'est "on appelle toujours le constructeur des classes ascendantes".

    Sauf indication contraire, ce sera implicitement le constructeur par défaut, celui qui ne prend pas de paramètre et donc on peut l'appeler puisqu'il n'y a pas de paramètre qu'on ne connaisse pas pour l'appeler. S'il se trouve que la classe ascendante ne définit aucun constructeur, la règle habituelle de Java s'applique : il ajoute implicitement un constructeur par défaut vide, et donc ce sera ce constructeur vide qui sera appelé implicitement.
    Et si la classe ascendante déclare des constructeurs, mais aucun par défaut (ils prennent tous des paramètres) ou que celui par défaut est inaccessible (private ou package-private), alors l'appel obligatoire au constructeur de la classe parente ne peut pas être implicite. Il faut le faire explicitement avec une instruction super(paramètres);
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Appel implicite à getView
    Par cool dans le forum Android
    Réponses: 2
    Dernier message: 29/08/2011, 12h24
  2. Réponses: 2
    Dernier message: 09/03/2010, 00h46
  3. héritage et appel de fonction dans constructeur
    Par r0d dans le forum Langage
    Réponses: 23
    Dernier message: 09/10/2009, 10h09
  4. Réponses: 3
    Dernier message: 19/10/2008, 20h17
  5. [héritage privé] appel du constructeur de base
    Par PINGOUIN_GEANT dans le forum C++
    Réponses: 4
    Dernier message: 19/10/2004, 15h05

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