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 :

Compréhension exercice certification Java


Sujet :

avec Java

  1. #1
    Membre du Club
    Femme Profil pro
    Inscrit en
    Septembre 2008
    Messages
    134
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 134
    Points : 66
    Points
    66
    Par défaut Compréhension exercice certification Java
    Bonjour,
    je suis en train de regarder les exos du chap2 et meme par son explication je ne comprends pas bien :

    voici cette exercice :
    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
     
    classe A{}
    classe B extends A {}
    public class toto {
     static String s="-";
     public static void main (String[] args){
      A aa = new A[2];
      B ba = new B[2];
     
      titi(aa);
      titi(ba);
      titi(7);
      System.out.println(s);
     }
     
     static void titi(A[]... a2) {s+="1"};
     static void titi(B[]... b1) {s+="2"};
     static void titi(B[] b1) {s+="3"};
     static void titi(Object o) {s+="4"};
    }
    et j'ai le choix entre les 4 résultats : 
    -124
    -134
    -424
    -434
    -444
    La réponse est 434 mais je ne comprends toujours pas pourquoi on choisi la réponse 3 et 4
    On partirait que l'on overload du plus général au plus spécifique donc de l'Object vers un tableau qui est en principe défini comme un objet alors pour choisir la réponse 4 pour le int 7?
    je dois dire que c'est assez confus
    pourriez-vous m'aider?

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 552
    Points : 21 608
    Points
    21 608
    Par défaut
    Citation Envoyé par prugne Voir le message
    On partirait que l'on overload du plus général au plus spécifique donc de l'Object vers un tableau qui est en principe défini comme un objet alors pour choisir la réponse 4 pour le int 7?
    je dois dire que c'est assez confus
    En effet, je n'ai pas compris ta phrase du dessus.

    Mais bon, pour le int 7 c'est évident : int n'est pas un sous-type de A[] ni de A[][] ni de B[] ni de B[][]. Il ne peut pas non plus être implicitement converti en un sous-type de l'un d'eux.

    Par élimination, les méthodes 1, 2 et 3 sont rejetées d'office, il reste donc la 4.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Pour l'entier "7", depuis Java 1.5, il y a de l'auto-boxing.
    Le "7" de type "int" est changé automatiquement en objet java.lang.Integer.
    La seule méthode "titi" capable de prendre un Integer en paramètre est la "4".
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  4. #4
    Membre du Club
    Femme Profil pro
    Inscrit en
    Septembre 2008
    Messages
    134
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 134
    Points : 66
    Points
    66
    Par défaut ok merci
    j'ai compris pour le int 7
    et pourquoi la réponse ne serait pas plus : 334 concernant le choix des méthodes pour les tableaux de type A et B ?

  5. #5
    Modérateur
    Avatar de XxArchangexX
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mars 2012
    Messages
    1 159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2012
    Messages : 1 159
    Points : 2 323
    Points
    2 323
    Par défaut
    Comme sa je te dirais que si tu as un 3 c'est que l'objet est du type B[], alors que ton premier objet c'est aa de type A[], donc tu n'auras jamais un début avec 3.
    L'Etat est bien administré quand l'escalier de l'école est usé et que l'herbe croît sur celui du tribunal.

    Modérateur BI

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 802
    Points : 653
    Points
    653
    Par défaut
    Tu as fais une petite erreur de retranscription aux lignes 7 et 8. Tu devrais plutôt avoir ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    A[] aa = new A[2];
    B[] ba = new B[2];
    Pour répondre à ta question, la réponse ne peut pas être 334 pour plusieurs raisons.

    Tout d'abord, nous avons affaire à des tableaux. Or, si A hérite de B, A[ ] n'hérite pas de B[ ] !!! Les tableaux, quel que soit leur type, héritent directement et uniquement de Object.

    Ensuite, dans l'hypothèse où nous aurions affaire à des objets simples et non à des tableaux, c'est B qui hérite de A. Donc une méthode titi(B) ne pourrait pas être appelée en lui passant une instance de A. C'est l'inverse qui est possible, appeler une méthode titi(A) en lui passant une instance de B.


  7. #7
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 552
    Points : 21 608
    Points
    21 608
    Par défaut
    Citation Envoyé par verbose Voir le message
    Tout d'abord, nous avons affaire à des tableaux. Or, si A hérite de B, A[ ] n'hérite pas de B[ ] !!! Les tableaux, quel que soit leur type, héritent directement et uniquement de Object.
    Holà !
    A[] n'est pas un sous-type de B[], mais B[] est bel et bien un sous-type de A[] puisque B extends A.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 802
    Points : 653
    Points
    653
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Holà !
    A[] n'est pas un sous-type de B[], mais B[] est bel et bien un sous-type de A[] puisque B extends A.
    Effectivement, après vérification B[ ] hérite bien de A[ ] si B hérite de A. J'ai toujours cru que ce n'était pas le cas. Désolé pour la bourde

  9. #9
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 552
    Points : 21 608
    Points
    21 608
    Par défaut
    Citation Envoyé par verbose Voir le message
    Effectivement, après vérification B[ ] hérite bien de A[ ] si B hérite de A. J'ai toujours cru que ce n'était pas le cas. Désolé pour la bourde
    Je ne sais pas si on peut parler d'héritage, mais l'un est un sous-type de l'autre.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  10. #10
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2008
    Messages
    1 190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 190
    Points : 2 657
    Points
    2 657
    Par défaut
    Je ne crois que le terme héritage peut s'appliquer sur des tableaux...
    D'ailleurs il me semble qu'il n'est pas possible de faire un cast d'un tableau non?

  11. #11
    Membre chevronné
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Points : 1 855
    Points
    1 855
    Par défaut
    bon comme ça j'aurais dit 134
    urgh
    tout viens des règles de levée des ambiguités lorsqu'il y a surcharge.
    si une méthode est définie comme f(A[]... arg)
    on peut l'invoquer avec un seul argument de type A[] (donc 1)
    MAIS
    en cas d'ambiguité (ici avec la surcharge qui prend Object) le compilateur se comporte en prenant en priorité ce qui se serait passé en version pre 1.5!)

    Donc:
    1) l'introduction tardive de varargs a conduit à des trucs bizarres
    2) ne pas s'encombrer l'esprit avec ce genre de détail oiseux
    J'ai des principes: je peux toujours trouver une bonne raison pour les contredire .... mais j'ai des principes!
    (mon excellent bouquin sur Java : https://eska-publishing.com/fr/livre...822407076.html)

  12. #12
    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
    je rajoute que, à cause de ces ambiguités, il n'est par recommandé d'avoir une méthode avec un vararg et une autre méthode, sans vararg, qui serait compatible (typiquement ici Object pour remplacer le vararg).

    Les règles d'attribution disent simplement (si ma mémoire est bonne) qu'on attribue à un vararg uniquement si on n'a pas pu attribuer à rien d'autre.

  13. #13
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 552
    Points : 21 608
    Points
    21 608
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Les règles d'attribution disent simplement (si ma mémoire est bonne) qu'on attribue à un vararg uniquement si on n'a pas pu attribuer à rien d'autre.
    Hélas, ce n'est pas si simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public static void test(Object o) {
      System.out.println("test(Object)");
    }
     
    public static void test(String... strings) {
      System.out.println("test(String...)");
    }
     
    public static void main(String[] args) {
      String[] strings = new String[8];
      test(strings);
    }
    Pourtant, test(Object) aurait parfaitement accepté un String[].
    Mais en tant que type tableau, Java favorise l'emploi du vararg.

    Il y a une certaine logique : sans cela, il n'y aurait aucun moyen d'appeler test(String...) autrement qu'en fournissant littéralement au moins deux Strings. Dans le cas d'une seule String, ou bien d'un nombre inconnu à l'avance de Strings, on serait obligé de passer par la réflectivité, pour s'en servir.
    Alors que comme ça, il suffit de construire un tableau. Si on préfère test(Object) pour ce tableau, on peut le cast en Object.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  14. #14
    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


    Bon ben dès que je trouve une corde, je vais me pendre. En tout cas ça confirme la bonne pratique avec les varargs: ne pas laisser de choix possible au compilateur, éviter les apis ambigues

  15. #15
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2008
    Messages
    1 190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 190
    Points : 2 657
    Points
    2 657
    Par défaut
    Citation Envoyé par tchize_ Voir le message


    Bon ben dès que je trouve une corde, je vais me pendre. En tout cas ça confirme la bonne pratique avec les varargs: ne pas laisser de choix possible au compilateur, éviter les apis ambigues
    On peut se retrouver avec des trucs marrant à la sortie sinon ^^
    C'est typiquement le genre de test qu'on retrouve à l'embauche ou dans les certifs et qui ne sert absolument à rien pour moi.

  16. #16
    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
    Bah, j'aurais tendance à l'embauche à donner un +1 au gars qui barre ça en disant "code de cochon"

  17. #17
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2008
    Messages
    1 190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 190
    Points : 2 657
    Points
    2 657
    Par défaut
    Moui... On peut répondre qu'on refuse de savoir ce que ça fait parce que ça devrait jamais être fait comme ça!

  18. #18
    Membre chevronné
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Points : 1 855
    Points
    1 855
    Par défaut
    ou que ce genre de détail fumeux ne mesure pas les compétences. Il ne sert qu'à faire plaisir à ceux qui sont tout content d'avoir exhibé un piège dans java et à ceux qui se réfugient dans ce genre de tests parce que, au fond, ils ne savent pas vraiment évaluer les compétences de quelqu'un...
    Dire ça de manière juste sans passer pour une personne hautaine et méprisante est tout un art qui vous qualifie pour le poste!
    (euh ... la rédaction de ce billet n'est donc pas un bon exemple! )
    J'ai des principes: je peux toujours trouver une bonne raison pour les contredire .... mais j'ai des principes!
    (mon excellent bouquin sur Java : https://eska-publishing.com/fr/livre...822407076.html)

  19. #19
    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
    J'ai fait ce genre de truc à une interview
    "Alors, voilà le résultat de votre test psychologique, pourriez-vous le commenter?"
    "Non"
    "Comment ça non?"
    "Mais commentaires seraient désobligeants envers les personnes ayant réalisé ce test"

  20. #20
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2008
    Messages
    1 190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 190
    Points : 2 657
    Points
    2 657
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    J'ai fait ce genre de truc à une interview
    "Alors, voilà le résultat de votre test psychologique, pourriez-vous le commenter?"
    "Non"
    "Comment ça non?"
    "Mais commentaires seraient désobligeants envers les personnes ayant réalisé ce test"
    Aaaa le test pour le plaisir de tester! Toute une histoire

Discussions similaires

  1. [Java] Seriez-vous intéressé par un Guide à la Certification Java ?
    Par christopheJ dans le forum Certifications
    Réponses: 121
    Dernier message: 07/09/2011, 18h39
  2. [Java] Livres de certification java 5
    Par garincha55 dans le forum Certifications
    Réponses: 2
    Dernier message: 13/04/2006, 15h20
  3. [Java] Infos et feedback sur la certification Java SCJP
    Par Gregory3000 dans le forum Certifications
    Réponses: 1
    Dernier message: 19/10/2005, 09h06
  4. Passer les certifications java sans se ruiner.
    Par Turtle dans le forum Certifications
    Réponses: 7
    Dernier message: 21/03/2005, 09h21

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