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 :

Petite question concernant la POO


Sujet :

avec Java

  1. #1
    Futur Membre du Club
    Inscrit en
    Avril 2008
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 16
    Points : 9
    Points
    9
    Par défaut Petite question concernant la POO
    Bonjour tout le monde, je débute en POO et j'ai une question.
    J'ai par exemple une classe "ClasseA" et une classe "ClasseB" qui hérite de classeA.
    Quel est l'utilité de faire ClasseA clA = new ClasseB(), pourquoi ne fait on pas directement ClasseB clB = new ClasseB() puisque classeB contient toutes les propriétés de classeA...
    Je pose cette question parce que j'ai un programme où j'ai un vecteur d'objets "Pion", j'ai des objets "PionBlanc" et "PionNoir" qui hérite de la classe Pion, j'ai fait une boucle pour remplir un vecteur de PionBlanc et un autre de PionNoir or je n'arrive pas à redéfinir mes méthodes, c'est toujours la méthode dans la classe Pion qui est executée.

    Voila, merci d'avance!

  2. #2
    Modérateur

    Avatar de Robin56
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juin 2009
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juin 2009
    Messages : 5 297
    Points : 13 670
    Points
    13 670
    Par défaut
    Le principe de faire ClasseA clA = new ClasseB() est de rendre le code le plus générique possible. Car dans ton code clA est un objet ClasseA, il peut donc être réutiliser en objet ClasseC (héritant de ClasseA) ou en objet ClasseB ou en objet ClasseA.

    clA est donc de type ClasseA et est instancié en objet de ClasseB.

    Tu dis ne pas réussir à redéfinir tes méthodes, tu réécris bien la même signature de méthode dans la classe fillle ?

  3. #3
    Futur Membre du Club
    Inscrit en
    Avril 2008
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par Robin56 Voir le message
    Le principe de faire ClasseA clA = new ClasseB() est de rendre le code le plus générique possible. Car dans ton code clA est un objet ClasseA, il peut donc être réutiliser en objet ClasseC (héritant de ClasseA) ou en objet ClasseB ou en objet ClasseA.

    clA est donc de type ClasseA et est instancié en objet de ClasseB.

    Tu dis ne pas réussir à redéfinir tes méthodes, tu réécris bien la même signature de méthode dans la classe fillle ?
    D'accord merci, je crois que c'est bon en fait pour mon problème, je devais m'être effectivement trompé dans la signature, par contre un méthode qui est redéfinie doit être forcément de type void dans le cas où la méthode dans la classe mère ne fait rien?

  4. #4
    Modérateur

    Avatar de Robin56
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juin 2009
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juin 2009
    Messages : 5 297
    Points : 13 670
    Points
    13 670
    Par défaut
    Si la méthode de la classe mère à la signature suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private void myFunction();
    Si tu veux une méthode de la classe fille qui redéfinit, tu dois aussi mettre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private void myFunction();
    Donc oui, il faut mettre la même chose. Si tu veux des retours différents, là tu n'entres plus dans le cadre de l'héritage d'une classe parente mais bien dans la surcharge de la fonction comme là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    private static int addition(int x, int y)
    {
    	System.out.println("additionne des int");
    	return x + y;
    }
     
    private static float addition(float x, float y)
    {
    	System.out.println("additionne des float");
    	return x + y;
    }
    Il y a une différence entre surcharge et redéfinition d'une fonction. Dans le cas de l'héritage, il faut faire de la redéfinition.

  5. #5
    Futur Membre du Club
    Inscrit en
    Avril 2008
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par Robin56 Voir le message
    Si la méthode de la classe mère à la signature suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private void myFunction();
    Si tu veux une méthode de la classe fille qui redéfinit, tu dois aussi mettre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private void myFunction();
    Donc oui, il faut mettre la même chose. Si tu veux des retours différents, là tu n'entres plus dans le cadre de l'héritage d'une classe parente mais bien dans la surcharge de la fonction comme là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    private static int addition(int x, int y)
    {
    	System.out.println("additionne des int");
    	return x + y;
    }
     
    private static float addition(float x, float y)
    {
    	System.out.println("additionne des float");
    	return x + y;
    }
    Il y a une différence entre surcharge et redéfinition d'une fonction. Dans le cas de l'héritage, il faut faire de la redéfinition.
    Quand je met la signature d'une fonction dans la classe mere, il me met "This method requires a body instead of a semicolon" donc il veut absolument que la fonction ai un corps (même s'il est vide)...

  6. #6
    Modérateur

    Avatar de Robin56
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juin 2009
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juin 2009
    Messages : 5 297
    Points : 13 670
    Points
    13 670
    Par défaut
    Oui oui c'est normal, la syntaxe que j'ai mis était pour te montrer la signature d'une méthode.
    private void myFunction()

    Dans la classe mère tu dois mettre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    private void myFunction()  {
      // traitement de ta classe
    }
    Parcontre tu dis donc que ta classe mère a des méthodes vides tout le temps ? Si oui, la classe mère n'a peut être pas besoin d'être une classe mais une interface. Et regarde le point 4.6.7 du tuto Java

  7. #7
    Futur Membre du Club
    Inscrit en
    Avril 2008
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par Robin56 Voir le message
    Oui oui c'est normal, la syntaxe que j'ai mis était pour te montrer la signature d'une méthode.
    private void myFunction()

    Dans la classe mère tu dois mettre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    private void myFunction()  {
      // traitement de ta classe
    }
    Parcontre tu dis donc que ta classe mère a des méthodes vides tout le temps ? Si oui, la classe mère n'a peut être pas besoin d'être une classe mais une interface. Et regarde le point 4.6.7 du tuto Java
    D'accord merci!

  8. #8
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Points : 2 061
    Points
    2 061
    Par défaut
    bonjour,

    J'ajouterais a ce qui a été dit que si seulement certaines méthodes de la classe mère n'ont pas de corps alors c'est une classe abstraite !

    Il y a une explication et un très bon exemple ici

  9. #9
    Futur Membre du Club
    Inscrit en
    Avril 2008
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par Alkhan Voir le message
    bonjour,

    J'ajouterais a ce qui a été dit que si seulement certaines méthodes de la classe mère n'ont pas de corps alors c'est une classe abstraite !

    Il y a une explication et un très bon exemple ici
    Ok, merci beaucoup, je vais lire tout ca!

Discussions similaires

  1. [MySQL] Petite question concernant la notation utilisée dans une requête
    Par jlb59 dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 31/01/2008, 09h40
  2. Petite question concernant Upnp
    Par lolblablatos dans le forum Web & réseau
    Réponses: 1
    Dernier message: 19/11/2007, 22h07
  3. Petite question concernant la boite d'alimentation
    Par pop10 dans le forum Composants
    Réponses: 2
    Dernier message: 06/11/2007, 19h07
  4. Réponses: 2
    Dernier message: 07/05/2007, 16h46
  5. Réponses: 11
    Dernier message: 21/06/2005, 10h16

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