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 1.5] Heritage et méthode


Sujet :

avec Java

  1. #1
    Membre régulier
    Inscrit en
    Décembre 2008
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 190
    Points : 76
    Points
    76
    Par défaut [Java 1.5] Heritage et méthode
    Bonjour
    j'ai ce bout de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    class Maitre{
    	   void partir(){}
    	}
     
    class Esclave extends Maitre{
     
    String partir() {
    	return null;
    }
    }
    Dans la classe héritée Esclave il y a un problème avec la méthode String partir(). Si je la redefini en changeant les arguments il n'y a aucun problèmes, cependant en lui donnant une valeur de retour j'ai une erreur de compilation. Dans ce bout de code on ne m'explique pas pourquoi il y a ce problème.


    Bien à vous.

    PS: Les questions que je pose pourraient être interressantes en ce sens qu'elles résultent d'un questionnaire, un td que nous donne notre boite dans le but de prérparer l'examen 310-065. C'est généralement aussi des questions que les recruteurs posent pendant l'embauche, et surtout c'est une préparation aux examen scjp. Serait il possible à l'administrateur d'ouvrir un chapitre dédié à ce genre de posts ? C'est une simple suggestion.

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    C'est quand même assez débutant, comme question. Peut-être un peu tôt pour s'intéresser aux certifications.

    Bon, pour résumer :

    - Une méthode qui porte le même nom et admet les mêmes arguments qu'une méthode non privée de classe ascendante, devient une redéfinition de la méthode ascendante.
    - Une méthode qui en redéfinit une autre doit avoir une signature compatible :
    -- même nom
    -- mêmes paramètres
    -- même type de retour, ou type de retour spécialisé
    -- même accès ou accès élargi

    Donc :
    - partir() a le même nom et ne prend pas de paramètre dans Maitre et dans Esclave, n'est pas privée, et Esclave est classe descendante de Maitre
    -> Esclave.partir() redéfinit Maitre.partir()

    - partir() renvoie String dans Esclave et void dans Maitre
    -> String n'est pas void ni un sous-type de void, d'ailleurs void n'a pas de sous-type et n'est même pas un type lui-même.
    -> contraintes non respectées, erreur de compilation.


    Ça c'était l'explication rigoureusement mathématique.
    Pour faire simple, voyons un exemple : oublions void et remplaçons par int.

    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
    class Maitre{
      int partir(){
        return 0;
      }
    }
     
    class Esclave extends Maitre{
      String partir() {
        return null;
      }
    }
     
    class Test {
      public static void main(String[] args) {
         Maitre m1 = new Maitre();
         Maitre m2 = new Esclave();
         int sum = m1.partir();
         sum += m2.partir();
      }
    }
    Comme tu peux le voir, l'existence de la méthode partir() dans la classe Maitre, fait que l'on compte sur le fait que partir() renvoie un int pour tout objet qui est un Maitre, que ce soit son type instancié exact ou un sous-type.

    Les sous-classes ne peuvent donc pas la redéfinir pour lui faire renvoyer autre chose, c'est contradictoire.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre régulier
    Inscrit en
    Décembre 2008
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 190
    Points : 76
    Points
    76
    Par défaut
    Citation Envoyé par thelvin Voir le message
    ....Les sous-classes ne peuvent donc pas la redéfinir pour lui faire renvoyer autre chose, c'est contradictoire.
    Merci

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

Discussions similaires

  1. Heritage et méthode virtuelle dans constructeur
    Par nspxroronoa dans le forum C++
    Réponses: 14
    Dernier message: 01/12/2011, 10h49
  2. [Java] arguments infini d'une méthode
    Par JOBiJOBa3 dans le forum Débuter avec Java
    Réponses: 7
    Dernier message: 17/07/2009, 09h57
  3. Réponses: 7
    Dernier message: 18/06/2008, 19h01
  4. [JNI] Java ne trouve pas mes méthodes natives
    Par carotte31 dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 14/06/2006, 21h47
  5. JAVA - Passer des Objects à des méthodes
    Par canou94 dans le forum CORBA
    Réponses: 2
    Dernier message: 15/11/2005, 22h39

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