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 :

Heritage de constructeurs


Sujet :

Langage Java

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Avril 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 4
    Points : 5
    Points
    5
    Par défaut Heritage de constructeurs
    Bonjour a tous!
    Je suis en L2 d'info a la fac et je commence a faire du java...
    Je vais surement vous poser une question un peu bete mais je n'ai pas trouvé de reponse sur le net malgré un bon nombre de pages sur le sujet.
    Voila en gros je fais un exercice pour m'entrainer avec des portes logique Non-ou et Non-et.
    J'ai une classe mere Tportelogique

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public class Tportelogique {
    private boolean e1,e2;
     
    //constructeur
    public Tportelogique (boolean x, boolean y){
    	e1=x;
    	e2=y;
    ....
    Ensuite j'ai une classe par exemple Tnor pour faire l'operation sur les booleens

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public class Tnor extends Tportelogique {
     
    public boolean sortie(){
    	return (!(getE1()||getE2()));
    }
    }
    Enfin j'ai créé un main pour tester tout ca. Et la ca coince

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public class TestPorteLogique {
     
    	public static void main (String[]args){
    		//Test de Tnor
    		Tnor test1 = new Tnor (false, true);
    		System.out.println(test1.sortie());
     
    }
    Eclipse me dit que le constructeur n'est pas defini. En exercice on avait dit que java allait en fait chercher dans l'arbre d'heritage jusqu'a ce qu'il trouve un constructeur correspondant...N'est pas le cas dans la classe Tportelogique?
    J'ai voulu essayer d'utiliser "super" sans resultat.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public class Tnor extends Tportelogique {
    	public Tnor(){
    		super(x, y);
    		}
    public boolean sortie(){
    	return (!(getE1()||getE2()));
    }
    }
    Je pense que je fais un peu n'importe quoi et que ca fera peur a la plupart d'entre vous
    On n'a pas encore vu ca en cours c'est ma seule mini excuse
    Merci d'avance.
    (ayez pitié d'un noob )

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    230
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 230
    Points : 310
    Points
    310
    Par défaut
    Essaye plutôt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public class Tnor extends Tportelogique {
     
       public Tnor(boolean x, boolean y){
          super(x, y);
       }
     
       public boolean sortie() {
          return (!(getE1()||getE2()));
       }
    }

  3. #3
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    Non les constructeurs ne sont pas hérité. Chaque classe possède ses propres constructeurs, en respectant les règles suivantes :

    • Chaque classe possède au minimum un constructeur. Si tu écrit une classe sans constructeur, un constructeur public vide (sans paramètre) sera automatiquement créé par le compilateur.
    • Chaque constructeur doit appeler un des constructeurs de la classe parente via le mot-clef super() au tout début. Si ce n'est pas explicite dans le code alors le compilateur rajoutera cet appel automatiquement sur le constructeur vide de la classe parente.
    • Il y a une exception à la règle précédente : un constructeur peut appeler une autre constructeur de la même classe avec this() (et du coup l'appel à super() se fera dans l'autre constructeur).



    Donc tu dois bien coder un constructeur pour ta classe Tnor. D'ailleurs elle ne doit pas compiler car le compilateur n'arrive pas à créer son constructeur implicite puis la classe parent ne possède pas de constructeur vide :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public class Tnor extends Tportelogique {
     
    	// Implicite : généré par le compilateur !
    	public Tnor() {
    		super();
    	}
     
    ...

    Tu dois coder le constructeur toi-même :
    [code]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public class Tnor extends Tportelogique {
     
    	public Tnor(boolean x, boolean y) {
    		super(x, y); // On se contente d'appeler le parent
    	}
     
    ...

    a++


    PS : Essayes de prendre les bonnes habitudes dès le début. En Java les noms de classe utilisent une majuscule pour chaque mot qui le compose, bref Tportelogique devient TPorteLogique (et avec l'habitude c'est plus facile à lire )

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Avril 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 4
    Points : 5
    Points
    5
    Par défaut Merci
    Merci a vous deux ca marche maintenant.
    Je suis un peu dindon ce n'etait pas compliqué!!!
    Merci merci!
    (N'empeche pas cool la prof avec le coup des constructeurs herités...J'ai du mal comprendre! (j'espere pour elle))
    Enfin, merci pour le conseil, mes noms de classes vont changer
    A bientot pour de nouvelles questions bebetes (promis je fais des efforts!)

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

Discussions similaires

  1. probleme heritage et constructeur
    Par guitariste dans le forum C++
    Réponses: 18
    Dernier message: 31/01/2008, 19h55
  2. heritage et constructeur
    Par dhoorens dans le forum C++
    Réponses: 6
    Dernier message: 05/10/2007, 14h38
  3. [POO] [PHP4.4.4] heritage et constructeur
    Par jeff_! dans le forum Langage
    Réponses: 3
    Dernier message: 07/12/2006, 15h02
  4. [C++]Heritage et constructeur de copie
    Par matazz dans le forum C++
    Réponses: 2
    Dernier message: 25/03/2005, 12h31
  5. [C++] Heritage - Probleme constructeur
    Par yanndublanche dans le forum Débuter
    Réponses: 2
    Dernier message: 04/08/2004, 10h17

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