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

Langage Java Discussion :

implements Cloneable avec public StringLocale clone() (et non pas public Object clone()) fonctionne?!


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    608
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 608
    Par défaut implements Cloneable avec public StringLocale clone() (et non pas public Object clone()) fonctionne?!
    Bonjour,

    C'est peut être parce que c'est Dimanche, un coup de fatigue ou bien parce que je vieillis, mais je perds mon latin là.

    J'ai écrit cette classe:
    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
    public class StringLocale implements Serializable, Cloneable
    {
    private Locale m_locale;
    private String m_contenu;
     
       @Override public StringLocale clone()
       {
          try
          {
             StringLocale c = (StringLocale)super.clone();
             c.m_locale = (Locale)m_locale.clone();
             return(c);
          }
          catch(CloneNotSupportedException e)
          {
             throw(new DefautLogicielException(e.getMessage(), e));
          }
       }
    }
    et je m'en accommodais très bien, d'autant qu'elle compilait sans problèmes et montrait sous Eclipse son signe Override...

    Jusqu'à ce que je me représente qu'elle n'aurait pas du compiler.
    parce que l'interface Cloneable n'est pas générique, et réclame l'implémentation de
    Un peu ébranlé, je me suis dit: tiens, on peut redéfinir le type de retour en implémentant une interface non générique.
    Mon monde vacillait déjà quelque peu...

    Mais ceci passe aussi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public class Sujet implements Cloneable 
    {
       public Sujet clone()
       {
          return(this.clone());
       }
    }

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public class SujetExamen extends Sujet
    {
       public SujetExamen clone()
       {
          return(this.clone());
       }
    }
    Redéfinir le type de retour d'une méthode dont on hérite... je n'avais jamais vu cela avant. Et pourtant, ça passe.

    Pourquoi est-ce accepté?

    En vous remerciant,

    Grunt.

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Ca s'appelle la covariance des type de retour, c'est apparu avec java 5. En gros, une classe qui fait un override d'une méthode du parent peut changer le type de retour, a la seule condition que le nouveau type de retour soit une sous classe du type de retour déclaré dans le parent.

    Ainsi, une méthode

    public Object x()

    peut etre redéfinie dans un enfant

    public String x()

  3. #3
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par grunt2000 Voir le message
    Pourquoi est-ce accepté?
    Une manière rapide de voir la réponse à cette question :

    quel problème cela pourrait-il possiblement poser ?

    SujetExamen étend Sujet. Il implémente donc toutes les méthodes que Sujet implémente, et répond true à instanceof Sujet.
    Tout bout de code qui s'attend à recevoir un Sujet et reçoit un SujetExamen "à la place" fonctionnera donc parfaitement. Ceci est la base du polymorphisme.

    D'ailleurs même si la méthode disait qu'elle renvoie un Sujet, rien ne l'empêche de renvoyer une instance de SujetExamen. La différence étant qu'elle se serait imposée de donner moins d'information qu'elle n'en a.
    Pourquoi faire ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre très actif

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    608
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 608
    Par défaut
    Si tout est normal, ma foi. Moi non plus je ne vois rien à y redire, en fin de compte. C'est même bien pratique.

    Il faut croire que je ne m'étais pas essayé à cela depuis Java 1.4, tout simplement.

    Merci !
    Grunt.

  5. #5
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Pour info tout ceci est indiqué dans la FAQ :

    Quelles sont les règles à respecter pour redéfinir/implémenter une méthode ?


    a++

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

Discussions similaires

  1. Requête avec date et champs oui/non
    Par MoonShadows dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 07/07/2007, 01h53
  2. Réponses: 5
    Dernier message: 10/05/2007, 11h54
  3. Réponses: 8
    Dernier message: 13/03/2007, 09h40
  4. Créer un message d'alerte avec comme solution oui ou non
    Par La_Bande_A_Zozo dans le forum C++Builder
    Réponses: 3
    Dernier message: 24/05/2006, 14h43
  5. Message avec un bouton "oui" et "non"
    Par PrinceMaster77 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 26/11/2004, 15h50

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