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 :

Héritage et Polymorphisme inversé


Sujet :

Langage Java

  1. #1
    Membre habitué Avatar de Iphelias
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2007
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Février 2007
    Messages : 126
    Points : 130
    Points
    130
    Par défaut Héritage et Polymorphisme inversé
    Bonjour,

    Je suis face à un problème dont je ne trouve pas de solution simple.
    Pour simplifier les choses voici un exemple :

    J'ai une méthode provenant d'un API qui me renvoit un objet de type "animal"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Animal monAnimal = zoo.getNewAnimal();
    Ma classe Animal provenant de l'API en question possède entre autre une méthode (ici manger) qui est protected.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public class Animal {
        protected void manger(){ 
     
        }
    }
    Comment faire pour utiliser cette méthode ?
    Car celle-ci ne peut être appelée que dans une classe fille ou au sein du même package (chose impossible car c'est une librairie privée).

    Je pensais au début faire une classe "Loup" qui hériterait de "Animal".
    Toutefois il est impossible d'utiliser le polymorphisme dans ce sens...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Loup monLoup =  zoo.getNewAnimal();
    Ceci provoque logiquement une ClassCastException.

    Comment faire pour m'en sortir ?

  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
    Ben, tu n'es pas censé t'en sortir. La méthode ne devrait pas être protected mais public, et puis c'est tout.

    Il y a toujours moyen de t'en sortir avec l'introspection et en modifiant les droits d'accès à la méthode.

    Autre solution, faire une classe AnimalUtil dans un package de même nom que celui de Animal, et faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public class AnimalUtil {
      public static void manger(Animal animal) {
        animal.manger();
      }
    }
    L'un comme l'autre sont des hacks.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre habitué Avatar de Iphelias
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2007
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Février 2007
    Messages : 126
    Points : 130
    Points
    130
    Par défaut
    Merci c'est bien ce qu'il me semblait...
    Saloperie de développement OffShore

  4. #4
    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
    C'est pas parce que c'est offshore que tu ne peux pas ajouter des classes dans le packages hein

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

Discussions similaires

  1. héritage et polymorphisme
    Par julien.metais dans le forum Hibernate
    Réponses: 3
    Dernier message: 17/05/2009, 09h58
  2. Réponses: 10
    Dernier message: 17/07/2008, 20h01
  3. héritage et polymorphisme
    Par davdou dans le forum JSF
    Réponses: 2
    Dernier message: 23/11/2007, 09h51
  4. [C#] Information sur héritage et polymorphisme
    Par LE NEINDRE dans le forum C#
    Réponses: 21
    Dernier message: 14/06/2007, 11h00
  5. Réponses: 19
    Dernier message: 05/06/2007, 08h13

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