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 :

[héritage] accès à une méthode d'un objet fille déclaré mère depuis une autre classe


Sujet :

avec Java

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 3
    Points : 2
    Points
    2
    Par défaut [héritage] accès à une méthode d'un objet fille déclaré mère depuis une autre classe
    Bonjour !
    Le titre n'est peut-être pas très clair mais je m'explique : en gros on a 2 classes mères A et B et leur classe fille respectives AF et BF.
    A contient un B et BF a sa propre méthode. BFmethode()

    AF contient un B (déclaré) mais en rélité ce sera obligatoirement un BF, Je souhaiterais que AF puisse appeler BFmethode() de manière "transparente".
    J'ai trouvé 1 solution mais je souhaiterais savoir s'il n'y a pas une mieux ? Les cast il faut mieux les éviter non?
    Merci de votre aide
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
    public class Main {
    //------------C L A S S----------------------
    	class B{
    		public B(){	
    		}
    	}
     
    	class BF extends B{
    		public BF(){
    		}
    		public void BFmethode(){
    			System.out.println("calculer2");
    		}
    	}
     
    	class A{
    		public B b;
     
    		public A(){	
    		}
     
    		public A(B b){
    			super();
    			this.b=b;
    		}
    	}
     
    	class AF extends A {
    		public AF(BF bf){
    			super(bf);
    			BF tmp;
    			tmp= (BF) this.b;
    			tmp.calculer2();
    		}
    	}
    //------------M A I N----------------------
    	public static void main(String[] args) {
            Main m = new Main();
            m.test();
        }
     
    	private void test(){
    		BF bf=new BF();
    		new AF(bf);
    	}
    }

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Une idée comme çà, les Generic?
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    	class A<T extends B>{
    		public T b;
     
    		public A(){	
    		}
     
    		public A(T b){
    			super();
    			this.b=b;
    		}
    	}
     
    	class AF extends A<BF> {
    		public AF(BF bf){
    			super(bf);
    			BF tmp;
    			tmp= this.b;
    			tmp.calculer2();
    		}
    	}
    // voir carrément jusqu'au bout
     
     
    	class AF2<T extends BF> extends A<T> {
    		public AF(T bf){
    			super(bf);
    			T tmp;
    			tmp= this.b;
    			tmp.calculer2();
    		}
    	}

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Mais c'est génial ça les generics !!!! Merci beaucoup tchize_ , je ne connaissais pas du tout ^^.
    C'est vraiment puissant .
    Par contre tu vas me trouver raleur (français jusqu'au bout ) mais il y a un léger "inconvenient" du coup si je crée un nouvel objet de type A je suis obligé de mettre "<B>" après chaque "A" par exemple :
    le problème ne se pose pas vraiment un si je crée un programme tout neuf, pas contre immaginons que j'ai déjà un long programme et que j'ai 1000 objets de type A éparpillés un peu partout dans mes programmes.
    Et immaginons que je veuille creer une classe fille AF pour mes besoins. Du coup partout dans mon programme je vais devoir modifier A en A<B> ? (je sais que le "chercher/remplacer" est cool mais bon xD je trouve que ça fait un peu bricolo non? )

    Il n'y a pas un moyen avec les generics de faire un "defaut" qui permette justement de ne pas avoir à systematiquement déclarer le type? i.e A et non A<B>

    Je sais qu'on ne peut pas toujours avoir le beurre et l'argent du beurre :o) mais on sait jamais avec java

    En tout cas merci beaucoup d'avoir pris le temps de répondre à ma question

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    548
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 548
    Points : 635
    Points
    635
    Par défaut
    Tu peux passer par un getter getB que tu surcharge dans AF en réduisant le type de retour:

    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
    20
    21
     
    	class A{
    		public B b;
     
                    public B getB() {
                           return b;
                    }
    	}
     
    	class AF extends A {
    		public AF(BF bf){
    			super(bf);
     
                            getB().BFmethode();
    		}
     
                    @Override
                    public BF getB() {
                           return (BF) b;
                    }
    	}

  5. #5
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par superttmp Voir le message
    du coup si je crée un nouvel objet de type A je suis obligé de mettre "<B>" après chaque "A" par exemple :
    imaginons que j'ai déjà un long programme et que j'ai 1000 objets de type A éparpillés un peu partout dans mes programmes.
    Et imaginons que je veuille creer une classe fille AF pour mes besoins. Du coup partout dans mon programme je vais devoir modifier A en A<B> ?
    Non, tu peux te passer de typer les generics, mais alors tu devra faire faire des typecasting toi meme. Bref, si tu utilise les generics, autant le faire bien.

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Merci infiniment pour vos conseils :-)
    Bien que ce soit hors sujet, je me permet juste de rajouter que je suis impressionné par ce forum. C'est une véritable mine d'or ^^. Ca fait super plaisir de voir l'activité qu'il y a ici ... et en français qui plus est ^__^
    Bravo à toute l'équipe

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

Discussions similaires

  1. [jMock] Appeler une méthode d'un objet mocké
    Par restricteur dans le forum Tests et Performance
    Réponses: 1
    Dernier message: 22/02/2009, 22h46
  2. Accès à une méthode d'un objet d'une classe
    Par neoraptor dans le forum Débuter
    Réponses: 7
    Dernier message: 29/01/2009, 10h17
  3. objet "this" mis à jour par une méthode sans raison
    Par Macomoul dans le forum Langage
    Réponses: 8
    Dernier message: 03/02/2008, 17h11
  4. Réponses: 11
    Dernier message: 11/04/2007, 18h33
  5. Réponses: 2
    Dernier message: 26/01/2007, 10h50

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