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

avec Java Discussion :

Question sur super()


Sujet :

avec Java

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 51
    Points : 41
    Points
    41
    Par défaut Question sur super()
    Bonsoir, dans le constructeur de la classe fille existe implicitement ou par default le super de la classe parente, sans l'avoir ajouté ? besoin de clarification la dessus.
    Merci .

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 547
    Points : 21 602
    Points
    21 602
    Par défaut
    Un appel au constructeur de la classe parente.

    Et oui, c'est inévitable. Les constructeurs d'une classe fille doivent toujours commencer par appeler le constructeur de la classe parente. L'appel à super(); est implicite si :
    - Il n'y a pas d'appel explicite d'un constructeur ;
    - l'appel explicite à super(); marcherait (autrement dit, si la classe parente a un constructeur sans paramètre et visible pour la classe fille.)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 51
    Points : 41
    Points
    41
    Par défaut
    Citation Envoyé par thelvin Voir le message
    - l'appel explicite à super(); marcherait (autrement dit, si la classe parente a un constructeur sans paramètre et visible pour la classe fille.)
    ici dans la classe parente nous avons un constructeur avec paramètre et pourtant le code ne compile pas tant qu'on a pas encore ajouter le super() dans le constructeur employee(String id) ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    class Person { 
         String name="No name";
         public Person(String nm){
         name =nm;}
     
    class Employee extends Person{
        String empID = "0000"; 
        public employee(String id){ empID = id; }
     
    public class EmployeeTest {
         public static void main( String [] args) {
            Employee e = new Employee("4231");
            System.out.println(e.empID);
    }}

  4. #4
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 547
    Points : 21 602
    Points
    21 602
    Par défaut
    Exactement. S'il n'y a ni appel explicite, ni appel implicite (du fait qu'il n'existe pas de constructeur à appeler implicitement,) alors ça ne compile pas.

    L'appel au constructeur de la classe mère est obligatoire.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 51
    Points : 41
    Points
    41
    Par défaut
    peux tu m'expliquer stp en faisant la comparaison entre ce code et l'exemple précédent.. pourquoi ici nous avons pas utilisé super() dans les constructeurs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    abstract class C1 {
       public C1(){ System.out.print(1); } }
     
    class C2  extends C1{
       public C2(){ System.out.print(2); } } 
     
    class C3  extends C2{
       public C3(){ System.out.print(3); }
     
    public class Ctest {
       public static void main (String [] a) { new C3(); } }
    le resultat retourné 123

  6. #6
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 547
    Points : 21 602
    Points
    21 602
    Par défaut
    ... Parce qu'il est implicite ? Tu te rappelles, 3 posts au-dessus ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre actif
    Homme Profil pro
    Développeur Java / JEE
    Inscrit en
    Février 2008
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java / JEE

    Informations forums :
    Inscription : Février 2008
    Messages : 185
    Points : 293
    Points
    293
    Par défaut
    Bonjour,

    En fait, l'appel implicite ne peut se faire que s'il existe un constructeur sans paramètre dans ta classe parente.
    Si ta classe parente n'a pas de constructeur sans paramètre alors il te faudra l'appeler explicitement.

    Dans l'exemple que tu donnes on aurait pu écrire C2 comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    class C2  extends C1 {
       public C2() { 
          super(); // qui appelle le constructeur de C1
          System.out.print(2); 
       } 
    }
    Mathieu

  8. #8
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 51
    Points : 41
    Points
    41
    Par défaut
    Merci c'est bien clair mnt

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [debutant] Questions sur 1 futur projet
    Par cyrull22 dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 28/04/2003, 22h49
  2. Quelques questions sur le TWebBrowser...
    Par CorO dans le forum Web & réseau
    Réponses: 3
    Dernier message: 17/01/2003, 22h23
  3. Question sur les handles et les couleurs...
    Par MrDuChnok dans le forum C++Builder
    Réponses: 7
    Dernier message: 29/10/2002, 09h45
  4. Réponses: 2
    Dernier message: 11/08/2002, 22h27
  5. question sur les message box !
    Par krown dans le forum Langage
    Réponses: 7
    Dernier message: 02/08/2002, 17h11

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