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 :

Réécriture méthode Héritage


Sujet :

avec Java

  1. #1
    Membre averti
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2012
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2012
    Messages : 13
    Par défaut Réécriture méthode Héritage
    Bonjour,
    Je ne comprend le principe de réécriture d'une méthode utilisé avec l'héritage,
    Je créer une classe Mère appelée TestMere et une classe Fille appelée TestFille.
    TestFille hérite donc de la classe TestMere.
    TestMere comporte un méthode que je souhaite réécrire dans la classe Fille sans qu'elle rentre dans la methode de la classe Mere.
    Malheureusement ma classe fille n'est pas reconnu et le compilateur ne passe pas dans la methode de la classe Fille.

    Cela vient'il d'une mauvaise déclaration d'objet ou autre ?

    Code :


    Le main :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public class Heritage
    {
    	public static void main ( String[] args)
    	{
    		TestMere test = new TestMere();
    		test.ecriture();
    	}
    }

    Classe Mere:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public class TestMere
    {
     
    	public void ecriture(){
    		System.out.println("Test.ecriture()");
    	}
    }

    Classe Fille:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public class TestFille extends TestMere
    {
     
    	@Override
    	public void ecriture() {
    		// TODO Auto-generated method stub
     
    		System.out.println("TestFille.ecriture()");
     
    	}
     
    }
    Merci d'avance pour votre aide

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    333
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 333
    Par défaut
    Est ce que c'est quelque chose comme ça que tu veux tester ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public class Heritage
    {
    public static void main ( String[] args)
    {
    TestMere test = new TestMere();
    test.ecriture();
    TestMere test2 = new TestFille();
    test2.ecriture();
    }
    }
    tu vas avoir :
    Test.ecriture()
    TestFille.ecriture()

  3. #3
    Membre averti
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2012
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2012
    Messages : 13
    Par défaut
    Non je pensais que en faisant Test.ecriture() le compilateur remarquerais qu'une classe fille existe est que la methode est réécriture dans celle-ci.
    Du coup je veux voir :
    "TestFille.ecriture()"

    En créant seulement l'objet de la classe mère.
    Je ne sais pas si c'est possible

  4. #4
    Membre expérimenté
    Avatar de karbos
    Inscrit en
    Novembre 2008
    Messages
    155
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 155
    Par défaut
    En fait l'intérêt de l'héritage c'est de faire abstraction de la manière dont tu as instancié tes classes. Mais tu dois quand même les instancier à un moment, sinon, dans quel cas ton compilateur choisirait entre la méthode de la classe mère ou celle de la classe fille ? A quoi ça sert d'avoir écrit les deux ?
    En Java on ne fait que des trucs utiles
    Voici un exemple où ton abstraction est utile :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    TestMere[] tableauDeTests = new TestMere[2] //<-- Un tableau pour stocker deux variables de type TestMere
    tableauDeTests[0] = new TestMere(); //<-- On instancie une classe mère qu'on stocke dans le tableau
    tableauDeTests[1] = new TestFille(); //<-- On instancie une classe fille qu'on stocke dans le tableau
    //Appelle des méthodes dans une boucle :
    for (int i = 0; i< 2; i++) {
      tableauDeTests[i].ecriture();
    }
    Comme avec l'exemple de LittleBean, tu vas avoir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Test.ecriture()
    TestFille.ecriture()

  5. #5
    Membre averti
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2012
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2012
    Messages : 13
    Par défaut
    Oui je comprend bien mais j'ai vu qu'on pouvais réécrire les méthodes d'une classe mere du coup le compilateur prend un compte la modification de la classe fille mais ne rentre pas dans la classes mère.

    Peut etre que je confond avec la surcharge de classe.
    Ces spécificité de ce langage ne sont pas encore très clair.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    333
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 333
    Par défaut
    En Java on ne fait que des trucs utiles
    ++

    Avec cet exemple ce sera paut être plus clair :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public class TestMere{
    	public void ecriture(){
    		System.out.println("Test.ecriture()");
    	}
    public void bonjour(){
    		System.out.println("bonjour");
    	}
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public static void main ( String[] args)
    {
    TestMere test = new TestFille();
    test.ecriture();
    test.bonjour();
    }
    Avec l'héritage là tu as modifié le code d'une seule méthode en gardant les autres.

    L'exemple est bateau mais si tu as un projet avec des milliers de classes, diminuer la redondance du code est indispensable.

  7. #7
    Membre averti
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2012
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2012
    Messages : 13
    Par défaut
    J'ai fais un schéma afin que ma question soit plus claire.
    A moins que ce soit moi qui ne comprenne pas :/

    Nom : Heritage.png
Affichages : 823
Taille : 211,3 Ko

  8. #8
    Modérateur
    Avatar de Hizin
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Février 2010
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Par défaut
    Citation Envoyé par tompitch
    Non je pensais que en faisant Test.ecriture() le compilateur remarquerais qu'une classe fille existe est que la methode est réécriture dans celle-ci.
    Du coup je veux voir :
    "TestFille.ecriture()"

    En créant seulement l'objet de la classe mère.
    Je ne sais pas si c'est possible
    Non.

    La classe mère n'a aucune visibilité de ses possibles filles et des redéfinitions faites.

    Le comportement normal est que la méthode appelée sera toujours celle du type "réel" de le classe.
    Un objet Mère appellera la méthode de "Mère", et un objet fille appellera la méthode qui a été redéfinie, s'il y en a une, sinon passera le flambeau à sa mère, et ainsi de suite.
    C'est Android, PAS Androïd, ou Androïde didiou !
    Le premier est un OS, le second est la mauvaise orthographe du troisième, un mot français désignant un robot à forme humaine.

    Membre du comité contre la phrase "ça marche PAS" en titre et/ou explication de problème.

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

  9. #9
    Membre expérimenté
    Avatar de karbos
    Inscrit en
    Novembre 2008
    Messages
    155
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 155
    Par défaut
    Citation Envoyé par tompitch Voir le message
    J'ai fais un schéma afin que ma question soit plus claire.
    A moins que ce soit moi qui ne comprenne pas :/
    Dans ton raisonnement, tu as une méthode qui ne sert à rien : celle de la classe mère. Or, en Java on n'écrit pas du code qui ne sert à rien (on est un peu trop fainéants pour ça) Donc on n'écrit pas ce code, et puis c'est tout. Le mécanisme d'héritage n'a pas pour vocation de réécrire du code devenu obsolète. Ça c'est le mécanisme de version

  10. #10
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 586
    Par défaut
    Pour le dire autrement, on peut créer autant de classe filles qu'on veut, Java n'en a rien à cirer tant qu'on lui dit pas d'aller chercher ces classes-là.

    D'ailleurs, c'est évident quand on y réfléchit. Une classe peut être la mère d'autant de classes qu'on veut, et chacune d'elle peut redéfinir tout ce qu'elle veut. Si Java s'amusait à aller chercher des classes filles sans qu'on lui demande, comment choisirait-il laquelle ?

    Au passage, ce n'est pas spécifique à Java, c'est tiré directement du système C++, et C# refait pareil.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  11. #11
    Membre extrêmement actif
    Avatar de MarieKisSlaJoue
    Homme Profil pro
    Ingénieur Cloud
    Inscrit en
    Mai 2012
    Messages
    1 145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Roumanie

    Informations professionnelles :
    Activité : Ingénieur Cloud
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 145
    Billets dans le blog
    20
    Par défaut
    Dans ton shema si tu veux renter dans ta classe fille il faut instanacier ton objet comme type TestFille.

    Si tu veux utiliser ta classe fille tu devrai écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TestFille test = new TestFille();
    Et la tu pourra appeller ta fonction fille.

    N'oublie pas que ton objet fille peux utiliser les fonction de ta classe mere, mais pas l'inverse. Et c'est exatement ce que tu fait.
    Ce post à été écrit par un panda
    Apollo 11 - AGC revue de code
    -- qwerty keybord

  12. #12
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 586
    Par défaut
    Citation Envoyé par MarieKisSlaJoue Voir le message
    Si tu veux utiliser ta classe fille tu devrai écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TestFille test = new TestFille();
    Comme l'a dit LittleBean, ça marche aussi très bien en faisant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TestMere test = new TestFille();
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  13. #13
    Membre extrêmement actif
    Avatar de MarieKisSlaJoue
    Homme Profil pro
    Ingénieur Cloud
    Inscrit en
    Mai 2012
    Messages
    1 145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Roumanie

    Informations professionnelles :
    Activité : Ingénieur Cloud
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 145
    Billets dans le blog
    20
    Par défaut
    Oui mais pour un débutant ça ma l'air moins claire.
    Ce post à été écrit par un panda
    Apollo 11 - AGC revue de code
    -- qwerty keybord

  14. #14
    Membre averti
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2012
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2012
    Messages : 13
    Par défaut
    D'accord merci de votre aide.

  15. #15
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 586
    Par défaut
    Citation Envoyé par MarieKisSlaJoue Voir le message
    Oui mais pour un débutant ça ma l'air moins claire.
    Ben la question porte sur le polymorphisme. En quoi ton exemple illustre du polymorphisme, je te le demande ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Pointeur sur méthode + héritage
    Par Bleastou dans le forum C++
    Réponses: 20
    Dernier message: 22/09/2008, 15h54
  2. Problème d'héritage d'une méthode protégée
    Par shenron666 dans le forum C++
    Réponses: 9
    Dernier message: 29/04/2005, 00h17
  3. Réponses: 8
    Dernier message: 04/06/2004, 10h13
  4. [Débutant] Héritage & appel de méthodes
    Par KooX dans le forum Langage
    Réponses: 4
    Dernier message: 12/05/2004, 00h37
  5. [Héritage] Redéfinition méthode
    Par petit-ourson dans le forum Langage
    Réponses: 9
    Dernier message: 06/05/2004, 17h06

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