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 :

[java] Exercice d'examen


Sujet :

avec Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 120
    Points : 43
    Points
    43
    Par défaut [java] Exercice d'examen
    Bonsoir,

    voici un exercice d'examen, il y a quelque point que je n'est pas saisie:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public interface I{
        public void f();
        public void g(int n);
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public interface J{
        public void g(int n);
        public int h(int n);
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public class A{
        private int moi;
        public A(int moi){this.moi=moi;}
        public int getMoi(){return moi;}
        public int f(int n){
    	moi+=n;
    	System.out.println("A"+moi);
    	return moi;
        }
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    public class B extends A implements J{
        private static int cptB;
        public B(int moi){
    	super(2*moi);
    	cptB++;
        }
        public void g(int n){System.out.println("B"+n+"-"+cptB);}
        public int h(int n){
    	int moi=getMoi();
    	System.out.println("B"+(moi+n));
    	return moi;
        }
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public class C extends A{
        public C(int moi){super(moi);}
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public class D extends B implements I{
        private int nb;
        public D(int moi,int nb){super(moi);this.nb=nb;}
        public void f(){
    	f(nb);
    	System.out.println("D"+nb);
        }
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public class E extends C implements I{
        public E(int moi){super(moi);}
        public void f(){System.out.println("E"+f(3));}
        public void g(int n){
     
        }
     
    }

    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
     
    public class Test2{
        public static void main(String[] args){
    	A a=new A(5);
    	A d1=new D(8,2);
    	B b1=new B(6);
    	C c1=new C(7);
    	D d2=new D(2,4);
    	System.out.println(a.f(2));
    	c1.f(2);
    	d2.f();
    	d2.g(3);
    	b1.g(2);
    	b1.h(4);
        }
    }

    alors dans l'exercice il faut dire si il y d'abord des erreurs dans le programme ensuite dire ce qu'il se passe pour chaque instruction dans le main (si erreur corrigé etc)

    ma première question:
    pourquoi D qui implements I compile sans erreur alors que E qui implements I ne compile pas sans la méthode g ?
    quand on implements une interface il faut utiliser toutes les méthodes de l'interface alors pourquoi sa compile??

    seconde question:
    A d1=new D(8,2); pourquoi sa compile sans erreur alors que A est la classe mère de D, elle ne possède donc pas toutes les méthodes de D (il n'y a que D qui hérite des méthodes de la classe A)

    dernière question:
    d2.g(3) donne B3-3 cptB est static c'est à dire que la variable gardera la valeur de chaque instance du même type: (la variable évolue)
    alors pourquoi : b1.g(2) donne B2-3 ? et non B2-4 !


    Merci d'avance pour votre aide !

  2. #2
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    144
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 144
    Points : 110
    Points
    110
    Par défaut
    pourquoi D qui implements I compile sans erreur alors que E qui implements I ne compile pas sans la méthode g ?
    car g() est une methode declaree dans l'interface ce qui signifie que n'importe quelle classe implementant 'interface specifique doit implementer ses fonctions

    quand on implements une interface il faut utiliser toutes les méthodes de l'interface alors pourquoi sa compile??
    quand on implemente une interface il faut definier toutes les methodes de l'interface

    A d1=new D(8,2); pourquoi sa compile sans erreur alors que A est la classe mère de D, elle ne possède donc pas toutes les méthodes de D (il n'y a que D qui hérite des méthodes de la classe A)
    ceci est du a l'heritage il ffaut comprendre comme ceci: une classe fille est une classe mere mais pas l'inverse.

    d2.g(3) donne B3-3 cptB est static c'est à dire que la variable gardera la valeur de chaque instance du même type: (la variable évolue)
    alors pourquoi : b1.g(2) donne B2-3 ? et non B2-4 !
    static dans ce cas ci signifie qu'il n'y a qu'une seule instance de la variable commune a tous les instances de cette classe. comme tu as instancie 3 classes B c'est normal d'avoir comme resultat 3 . cependant il 'est mieux d'initialiser ses variables 0,null, ou autres.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 120
    Points : 43
    Points
    43
    Par défaut
    Exercice 2:
    On désire, pour un logiciel de dessin vectoriel, sauvegarder un dessin constitué de figures géométriques (disque carré, rectangle). pour chacune de ces figures, on veut:

    -connaître son périmètre et son aire;
    -pouvoir afficher ses caractéristiques(coordonnées du point d'origine,diamètre ou dimension des côtés, sa couleur)
    -si on lui transmet un composant graphique de type java.awt.Canvas, la figure géométrique doit se dessiner sur le canvas.

    Q1.Définissez en java une figure géométrique répondant au cahier des charges;
    Q2.Proposez une implémentation complète dans le cas d'un carré(sauf pour la fonctionnalité de dessin).

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 120
    Points : 43
    Points
    43
    Par défaut
    pour la première question tu répète exactement ce que j'ai dit, mais je vien de comprendre c'est parce que D extends B donc il possède bien ma méthode g contrairement à E

    pour la seconde question ok j'ai comprit merci, je note ce que j'ai fait pour l'exercice 2 et j'ai quelque question ensuite

  5. #5
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    144
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 144
    Points : 110
    Points
    110
    Par défaut
    Pour l'exercice 2 on ne fournit pas du tout fait expose ton probleme, presente tes solutions et on te conseillera

  6. #6
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    144
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 144
    Points : 110
    Points
    110
    Par défaut
    Citation Envoyé par Delnir Voir le message
    pour la première question tu répète exactement ce que j'ai dit, mais je vien de comprendre c'est parce que D extends B donc il possède bien ma méthode g contrairement à E)
    je te mets sur la piste, je ne règle pas ton probleme. On a bien plus de satisfaction a trouver la solution a son probleme soi-même que quand c'est quelqu'un d'autre.
    Mais n'hesite surtout pas a poser des question quand tu ne comprends pas quelque chose. on se fera un plaisir de t'aider a comprendre.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 120
    Points : 43
    Points
    43
    Par défaut
    voilà ce que j'ai fait pour l'exercice 2 c'est correcte?

    -si on lui transmet un composant graphique de type java.awt.Canvas, la figure géométrique doit se dessiner sur le canvas.
    Sa jamais vu, je ne sait absolument pas ce qu'il faut faire !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public class FigureGeometrique{
        protected String couleur;
        protected int xOrigine, yOrigine;
     
        public FigureGeometrique(String couleur,int xOrigine,int yOrigine){
    	this.couleur=couleur;
    	this.xOrigine=xOrigine;
    	this.yOrigine=yOrigine;
        }
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public interface Icarre{
     
        public Carre(String couleur,int xOrigine,int yOrigine,int dimensionCotes);
     
     
        public int aire();
     
     
        public int perimetre();
     
    }
    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
     public class Carre implements Icarre{
     
        private int dimensionCotes;
        public Carre(String ouleur,int xOrigine,int yOrigine,int dimensionCotes){
    	super(couleur,xOrigine,yOrigine);
    	this.dimensionCotes=dimensionCotes;
        }
     
        public int aire(){
    	return (dimensionCotes*dimensionCotes);
        }
     
        public int perimetre(){
    	return(4*dimensionCotes);
        }
     
    }
    merci d'avance pour votre aide.

  8. #8
    Rédacteur
    Avatar de benwit
    Profil pro
    dev
    Inscrit en
    Septembre 2004
    Messages
    1 676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Septembre 2004
    Messages : 1 676
    Points : 4 265
    Points
    4 265
    Par défaut
    Citation Envoyé par adrien1 Voir le message
    ceci est du a l'heritage il ffaut comprendre comme ceci: une classe mere est une classe fille mais pas l'inverse.


    C'est pas en disant des énormités pareilles qu'il va comprendre.
    Une classe "fille" est une classe "mere" et pas l'inverse !!!

    A est la super classe (mère) de B et B est la supe rclasse (mère) de D.
    donc A est une super classe de D (par transitivité)
    D est une sous classe (fille) de B et B est une sous classe (fille) de A
    donc D est une sous classe de A (par transitivité)

    On dit que D est un B, D est un A
    On dit que B est un A
    On dit que E est un C, E est un A
    On dit que C est un A

    L'inverse n'est pas vrai !


    On peut parler d'héritage par analogie avec les arbres généalogique :
    A
    B C
    D E

    Quand tu montes, c'est les parents.
    Quand du descend, c'est les enfants.

    Vers le haut, c'est l'abstraction, la généralisation.
    Vers le bas, c'est le concret, la spécialisation.

    Les classes du bas reçoivent (hérites) des méthodes de leur parents, en plus des leurs, elles en ont donc plus.

    Un conseil : fais toi un petit dessin, tu visualiseras mieux.
    Les interfaces, c'est un contrat qui doit être respecté par une classe qui implémente l'interface. La classe qui implémente une interface doit avoir les méthodes de l'interface.
    Si la classe est abstraite, elle peut ne pas implémenter une des méthode de l'interface mais ça sera à une de ses classes filles de l'implémenter ! (Les enfants règlent les contrats des parents)
    Au final, la sous classe la plus en bas sera une classe concrete qui aura toutes les méthodes de l'interface (que ce soit à son niveau ou dans ses parents)

  9. #9
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    144
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 144
    Points : 110
    Points
    110
    Par défaut
    Citation Envoyé par benwit Voir le message


    C'est pas en disant des énormités pareilles qu'il va comprendre.
    Une classe "fille" est une classe "mere" et pas l'inverse !!!
    Olala je viens de m'en rendre compte c'est vrai que j'ai dit une fameuse bêtise là .
    Avec toute mes excuses. désolé. Je m'en vais directement edite mon post pour effacer cette vilaine crasse que j'ai mis. Honte sur moi


    En tout cas. en ce qui me concerne j'ai en general pas trop de mal pour comprendre les choses mais pour les faire comprendre aux autres ca a toujours été un peu plus difficile.
    De plus si je me mets a debiter des énormites. je suis vraiment géné. Mea culpa

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 120
    Points : 43
    Points
    43
    Par défaut
    ok si j'ai comprit déclarer B b1=new B(2); reviens au même que déclarer A b1=new B(2);
    rien ne différre des 2 instanciations (si non quel sont les changements dans l'exemple cité)

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 120
    Points : 43
    Points
    43
    Par défaut
    d2.g(3) donne B3-3 cptB est static c'est à dire que la variable gardera la valeur de chaque instance du même type: (la variable évolue)
    alors pourquoi : b1.g(2) donne B2-3 ? et non B2-4 !

    je ne comprend vraiment pas cette partie, d'ailleurs je n'est pas bien saisie la déclaration static d'un variable ou méthode static avec mes cours !

    pour moi le seul intérêt est qu'une variable static garde sa valeur par exemple si j'ai une instance A a1=new A() avec une classe A comprenant une variable static cpt avec le calcul cpt++ lorsqu'on va faire une autre instance A a2=new A() la variable cpt va garder la valeur de la première instance donc cpt=2

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 120
    Points : 43
    Points
    43
    Par défaut
    ma réponse à l'exercice 2 est t'elle corecte?, c'est bien sa qu'il fallait faire ?
    la partie avec le canvas je ne comprend pas...

  13. #13
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    144
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 144
    Points : 110
    Points
    110
    Par défaut
    Citation Envoyé par Delnir Voir le message
    d2.g(3) donne B3-3 cptB est static c'est à dire que la variable gardera la valeur de chaque instance du même type: (la variable évolue)
    alors pourquoi : b1.g(2) donne B2-3 ? et non B2-4 !

    je ne comprend vraiment pas cette partie, d'ailleurs je n'est pas bien saisie la déclaration static d'un variable ou méthode static avec mes cours !

    pour moi le seul intérêt est qu'une variable static garde sa valeur par exemple si j'ai une instance A a1=new A() avec une classe A comprenant une variable static cpt avec le calcul cpt++ lorsqu'on va faire une autre instance A a2=new A() la variable cpt va garder la valeur de la première instance donc cpt=2
    "static" pour une variable : signifie que la variable ne sera instancie qu'une et une seul fois et qu'elle sera commune a toutes les instances d'une classe.
    Chez toi il sert tout simplement a savoir combien d'instance tu as de la classe si tu regarde bien il y a en bien trois (une classe fille est une classe mere).
    tu incrementes cptB dans le constructeur dans a chaque nouvelle instance.

    "static" pour une methode : signifie que tu peux y faire appel sans avoir besoin d'une instance de la classe.

    est ce que tu comprends mieux?

  14. #14
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    144
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 144
    Points : 110
    Points
    110
    Par défaut
    alors moi ce que je ferais pour :
    la classe FigureGeometrique, je la declarerai abstract avec comme variables membres un point d'origine , la couleur,
    comme methodes membres l'aire et le perimetre

    je supprimerais les interfaces car je n'en trouve aucune utilite.
    la classe Carre je lui ajouterais "un point de destination".
    plus implementation des methodes de la mere

    pour la classe Cercle par exemple ajouter une variable membre rayon+
    implementer les methodes de la mere

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 120
    Points : 43
    Points
    43
    Par défaut
    """static" pour une methode : signifie que tu peux y faire appel sans avoir besoin d'une instance de la classe.""

    disons que j'ai une classe nommé calcul qui comprend une méthode static addition, comment vais je utiliser la méthode addition dans faire Calcul c=new Calcul() ?
    faut bien que je fasse c.addition(...); ou alors sa veux dire que la méthode addition s'utilise Uniquement dans sa propre classe?

    ""Chez toi il sert tout simplement a savoir combien d'instance tu as de la classe""
    ok pourquoi alors b1.g(2) donne B2-3 sa devrai donner cptB=1 non?

  16. #16
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    144
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 144
    Points : 110
    Points
    110
    Par défaut
    c'est bizarre mais j'ai l'impression que tu ne saisis pas trop l'utilité des interfaces.
    les interfaces servent à relier plusieurs classes qui n'appartiennent a la meme hierarchie.
    Je crois qu'il te serait util de revoir cette matiere?

    Pourquoi te retrouves-tu avec ce qui ressemble tres tres fort a un constructeur dans Icarre???

    Citation Envoyé par Delnir Voir le message
    """static" pour une methode : signifie que tu peux y faire appel sans avoir besoin d'une instance de la classe.""

    disons que j'ai une classe nommé calcul qui comprend une méthode static addition, comment vais je utiliser la méthode addition dans faire Calcul c=new Calcul() ?
    faut bien que je fasse c.addition(...); ou alors sa veux dire que la méthode addition s'utilise Uniquement dans sa propre classe?

    ""Chez toi il sert tout simplement a savoir combien d'instance tu as de la classe""
    ok pourquoi alors b1.g(2) donne B2-3 sa devrai donner cptB=1 non?
    non pour faire appel a une methode static sans vouloir instancier une classe tu ferais, en reprenant l'exemple de la classe Calcul, -> Calcul.addition(...);

    static pour une methode signifie que tu n'as pas besoin d'instancier la classe pour utiliser sa methode.
    ex: la classe System ne possede que des methodes static car tu n'as jamais fais System sys = new System();



    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
    public class Test2{
        public static void main(String[] args){
    	A a=new A(5);
    	A d1=new D(8,2);
    	B b1=new B(6);
    	C c1=new C(7);
    	D d2=new D(2,4);
    	System.out.println(a.f(2));
    	c1.f(2);
    	d2.f();
    	d2.g(3);
    	b1.g(2);
    	b1.h(4);
        }
    }
    C c1=new C(7); D d2=new D(2,4);A d1=new D(8,2); c'est a cause de ces trois instanciations, qui vont passer dans le constructeur oú tu incrementes cptB .
    donc puisqu'on y passe trois fois c'est normal que tu aies comme resultats 3

  17. #17
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 120
    Points : 43
    Points
    43
    Par défaut
    je ne voulais pas mettre d'interface, pour mon cas personnelle je trouve sa inutile étant donner qu'il faut réécrire toutes les méthodes. (erreur concernant le constructeur, car oui il n'y a pas de constructeur dans une interface)
    Je l'est fait pour respecter la question 2
    Oui Astract aurait était mieux pour respecter cette question, enfin je trouve sa également inutile.
    A la limite pour imposée une façon de faire à une autre personne sa peut être utile mais uniquement dans ce cas.

    "non pour faire appel a une methode static sans vouloir instancier une classe tu ferais, en reprenant l'exemple de la classe Calcul, -> Calcul.addition(...);"

    Ok je vois maintenant, merci pour ton aide !

  18. #18
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    144
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 144
    Points : 110
    Points
    110
    Par défaut
    Citation Envoyé par Delnir Voir le message
    je ne voulais pas mettre d'interface, pour mon cas personnelle je trouve sa inutile étant donner qu'il faut réécrire toutes les méthodes. (erreur concernant le constructeur, car oui il n'y a pas de constructeur dans une interface)
    Je l'est fait pour respecter la question 2
    Oui Astract aurait était mieux pour respecter cette question, enfin je trouve sa également inutile.
    A la limite pour imposée une façon de faire à une autre personne sa peut être utile mais uniquement dans ce cas.
    je ne pense pas avoir vu que tu devais utiliser un interface.

    j'oubliais il faut dans la classe FigureGeometrique declarer et/ou implementer une methode
    Affiche();
    et il faudrait une methode qui prend en parametre un Canvas et qui fait appel a la methode paint()

    aussi puisqu'on te dit que il faudrait dessiner un ensemble de formes geometrique si tu possedais une classe contenant un liste de tes formes se serait bien

  19. #19
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 120
    Points : 43
    Points
    43
    Par défaut
    et il faudrait une methode qui prend en parametre un Canvas et qui fait appel a la methode paint()

    il me reste plus que sa, je ne sait pas comment faire , jamais vu sa sa en cour :s

  20. #20
    Rédacteur
    Avatar de benwit
    Profil pro
    dev
    Inscrit en
    Septembre 2004
    Messages
    1 676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Septembre 2004
    Messages : 1 676
    Points : 4 265
    Points
    4 265
    Par défaut
    Citation Envoyé par Delnir Voir le message
    ok si j'ai comprit déclarer B b1=new B(2); reviens au même que déclarer A b1=new B(2);
    rien ne différre des 2 instanciations (si non quel sont les changements dans l'exemple cité)
    Dans les deux cas, tu crées un objet B.

    Si la variable b1 est déclaré de type B, tu peux appeler toutes les méthodes publiques de ton objet B (celle de A et celle de B)

    Si la variable b1 est déclaré de type A, tu ne peux appeler que les méthodes de A (sinon, il faut caster avec (B) pour appeler celles spécifiques à B)
    C'est d'ailleurs une bonne habitude d'utiliser la classe la plus abstraite/ou l'interface comme type de variable si on n'envisage d'utiliser que les méthodes les plus générales.

    Par exemple, tu as l'interface List qui a des méthodes pour ajouter, enlever, récupérer des éléments... Il y a plusieurs implémentations possibles comme ArrayList, LinkedList, ... qui implémentent cette interface à leur façon (elles doivent juste respecter le contrat et avoir les méthodes définis dans List) et qui ont des méthodes qui leur sont propres.

    Ainsi en général, il est préférable d'écrire :
    List l = new ArrayList();
    que
    ArrayList l = new ArrayList();

Discussions similaires

  1. problème java exercice et complexité
    Par baobab95 dans le forum Débuter avec Java
    Réponses: 20
    Dernier message: 14/06/2009, 14h40
  2. [SimpleXML] Résolution d'un exercice d'examen de XML
    Par setsuko974 dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 07/07/2007, 22h27
  3. débutant en java(exercice)
    Par hammouch dans le forum Langage
    Réponses: 2
    Dernier message: 23/02/2007, 10h35
  4. [Java] Examen de la certification Sun
    Par chady dans le forum Certifications
    Réponses: 8
    Dernier message: 23/12/2004, 14h11

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