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

Java Discussion :

Utilité d'une abstract methode


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 3
    Par défaut Utilité d'une abstract methode
    Bonjour à tous,

    En s'appuyant sur le tableau suivant représentant deux class , pourquoi déclarer une méthode abstraite (celle en rouge) dans une classe abstraite ? Après avoir instancié Loup avec et sans cette méthode je tombe sur le même résultat, ce qui me laisse perplexe sur l'utilité de cette instruction. Merci de vos éclaircicements.

    abstract class Animal{

    String couleur;
    int poids;

    abstract void manger();
    }
    public class Loup extends Animal {
    public Loup(String couleur, int poids){
    this.couleur = couleur;
    this.poids = poids;
    }
    public void manger() {
    System.out.println("Je mange de la viande.");
    }
    }

  2. #2
    Membre Expert Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 690
    Par défaut
    Tu as du faire une erreur quelquepart. Normalement le fait de déclarer un méthode abstract oblige a la définir dans les classes qui en héritent.
    Tu ne devrait pas pouvoir créer une classe Loup qui hérite de Animal sans définir la méthode manger().

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 3
    Par défaut
    J'apporte plus de précision : lorsque je commente ou décommente la ligne "abstract void manger();" de la class Animal, mon résultat est le même. Donc à quoi sert cette ligne ?

  4. #4
    Membre Expert Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 690
    Par défaut
    Elle sert a garantir que toute les classes qui héritent de Animal implémentent la méthode manger(). Comme on est sur que tous les animaux auront une méthode manger(), on pourra utiliser cette méthode pour les objets de la classe Animal quel qu'en soit le type final.

    Par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        public static void main(String[] args) {
            Loup mechantLoup = new Loup("gris",45);
            Lapin lapin1 = new Lapin("brun",8);
            Lapin lapin2 = new Lapin("blanc",6);
            Animal[] foret = {mechantLoup ,lapin1 ,lapin2};
     
            for (Animal animalDeLaForet : foret) {
                animalDeLaForet.manger();
            }
        }

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 3
    Par défaut
    Merci beaucoup Uther, voici qui est clair et qui fonctionne ! Même si le "new Animal[]" me gêne un peu du fait qu'on ne puisse pas instancier une classe abstraite. Mais il semblerait que cela ne gêne pas java. Sinon "new Animal[]" peut être tout simplement effacé sans changement sur l'exécution.

    Ĝis

  6. #6
    Membre Expert Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 690
    Par défaut
    Ne t'inquiète pas, on ne peut pas instancier un classe abstraite et Java ne transige pas avec la règle. Même si le mot clé new peut donner l'impression au premier coup d'oeil que l'on instancie un animal, il n'en est rien.
    Animal[] foret = new Animal[]{mechantLoup ,lapin1 ,lapin2}, c'est juste une forme abrégée de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Animal[] foret = new Animal[3]; // crée un tableau capable de contenir 3 Animaux mais qui est vide
    foret[0]=mechantLoup; // affectation dans le tableau de l'animal instancié plus haut
    foret[1]=lapin1; // idem
    foret[2]=lapin2; // idem
    Mais c'est vrai que j'avais oublié que lorsque l'on fait la déclaration et l'initialisation d'un tableau sur la même ligne, on peut abréger encore plus et ne pas préciser le "new Animal[]"

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

Discussions similaires

  1. Problème avec une generic method
    Par Pragmateek dans le forum Langage
    Réponses: 15
    Dernier message: 24/05/2006, 19h25
  2. PHP ORACLE ? Recherche une bonne methode
    Par Torando59 dans le forum Oracle
    Réponses: 4
    Dernier message: 24/01/2006, 12h54
  3. [Requete][Where] Quelle est l'utilité d'une clause: 1=1 ?
    Par alpachico dans le forum Langage SQL
    Réponses: 8
    Dernier message: 25/12/2005, 18h40
  4. Réponses: 5
    Dernier message: 07/07/2005, 10h20
  5. Utilité d'une multiplication rapide ?
    Par Jo'CaML dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 08/06/2005, 09h49

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