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 :

Question sur les classes abstraites


Sujet :

avec Java

  1. #1
    Membre régulier
    Inscrit en
    Décembre 2010
    Messages
    172
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 172
    Points : 85
    Points
    85
    Par défaut Question sur les classes abstraites
    Bonjour,
    le code de la classe mere:

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    abstract class Animal {
     
            /**
             * La couleur de l'animal
             */
            protected String couleur;
            /**
             * Le poids
             */
            protected int poids;
     
            /**
             * La méthode manger
             */ 
            protected void manger(){
                    System.out.println("Je mange de la viande");
            }
     
            /**
             * La méthode boire
             */
            protected void boire(){
                    System.out.println("Je bois de l'eau !");
            }
     
            /**
             * La méthode de déplacement
             */
            abstract void deplacement();
            /**
             * La méthode de cri 
             */
            abstract void crier();
     
            public String toString(){
     
                    String str = "Je suis un objet de la " + this.getClass() + ", je suis " + this.couleur + ", je pèse " + this.poids;
                    return str;
            }
     
    }
    le code de la sous-classe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public abstract class Felin extends Animal {
     
            void deplacement() {
                    System.out.println("Je me déplace seul !");
            }
     
    }
    le code de la fille :
    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
    public class Lion extends Felin {
     
            public Lion(){
     
            }
            public Lion(String couleur, int poids){
                    this.couleur = couleur;
                    this.poids = poids;
            }       
     
            void crier() {
                    System.out.println("Je rugis dans la savane !");
            }
     
    }
    1- Pourquoi la classe Lion n'est pas déclaré ABSTRAITE vu qu'elle contient une méthode ABSTRAITE "Crier"

    A+

    Merci les Gas de m'avoir aidé

  2. #2
    Membre chevronné
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Points : 1 806
    Points
    1 806
    Par défaut
    Elle ne contient justement plus de méthodes abstraites.

    La classe Animal déclare 2 méthodes abstraites : deplacement, et crier. Autrement dit, le compilateur sait que ces méthodes doivent exister sur des instances réelles, mais comme ça n'est pas implémenté, on ne peut pas créer un Animal en tant que tel.
    La classe fille Felin implémente une seule de ces deux méthodes ; elle doit donc rester abstraite. On ne peut donc pas créer de Felin en tant que tel (sinon on ne saurait pas comment crier).
    Enfin la classe fille Lion implémente la dernière méthode abstraite ; donc un Lion peut exécuter toutes les méthodes, et la classe n'a pas à être abstraite.

  3. #3
    Membre régulier
    Inscrit en
    Décembre 2010
    Messages
    172
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 172
    Points : 85
    Points
    85
    Par défaut
    Citation Envoyé par Rei Ichido Voir le message
    Elle ne contient justement plus de méthodes abstraites.

    La classe Animal déclare 2 méthodes abstraites : deplacement, et crier. Autrement dit, le compilateur sait que ces méthodes doivent exister sur des instances réelles, mais comme ça n'est pas implémenté, on ne peut pas créer un Animal en tant que tel.
    La classe fille Felin implémente une seule de ces deux méthodes ; elle doit donc rester abstraite. On ne peut donc pas créer de Felin en tant que tel (sinon on ne saurait pas comment crier).
    Enfin la classe fille Lion implémente la dernière méthode abstraite ; donc un Lion peut exécuter toutes les méthodes, et la classe n'a pas à être abstraite.
    j'ai compris la logique des classes abstraites ...

    mais y a une regle qui dit que si une classe contien une methode abstraite elle doit etre déclaré abstraite.

    Merci encore de m'avoir repondu

    A+

  4. #4
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Points : 2 061
    Points
    2 061
    Par défaut
    bonjour,

    ce que Rei Ichido a voulu te faire comprendre c'est que la classe lion ne contient plus de méthode abstraite (et n'est donc pas abstraite) puisqu'elle les implémentes toutes !
    Il n'y a pas de problème, il n'y a que des solutions.
    Cependant, comme le disaient les shadoks, s'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
    Si toutefois le problème persiste, la seule solution restante est de changer le périphérique qui se trouve entre la chaise et l'écran

    Mes Articles : Mon premier article est sur le language D
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre actif
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2009
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 130
    Points : 276
    Points
    276
    Par défaut
    Bonjour,

    mais y a une regle qui dit que si une classe contien une methode abstraite elle doit etre déclaré abstraite.
    Effectivement, cette règle existe mais on va dire qu'elle est mal énoncée :

    Une classe contenant une méthode déclarée abstraite doit être déclarée abstraite.

    Ici, ta classe Lion contient la méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    void crier() {
        System.out.println("Je rugis dans la savane !");
    }
    cette méthode n'est pas déclarée abstraite, donc ta classe n'est pas abstraite.

    Pour la classe Felin, la classe est abstraite car elle hérite des méthodes de la classe animal, elle défini la méthode déplacement, mais la méthode crier() n'est pas défini, donc la classe Felin contient implicitement la méthode J'espère t'avoir un peu mieux éclairer.

    EDIT : Alkhan a été plus rapide que moi, ça doit être du a son avatar!
    MigouW

    La seule bataille perdue d'avance est celle que l'on refuse de livrer.


    Pensez au tag
    Ma réponse vous a été utile, votez plus 1 sur le message.
    Ma réponse est hors sujet, votez moins 1 sur le message.

  6. #6
    Membre régulier Avatar de Tora21
    Homme Profil pro
    Développeur("Java"); //Débutant
    Inscrit en
    Mai 2011
    Messages
    140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur("Java"); //Débutant

    Informations forums :
    Inscription : Mai 2011
    Messages : 140
    Points : 116
    Points
    116
    Par défaut
    Ont peut rajouter que une classe contient des méthodes abstract mais peut aussi contenir des méthodes standard.

    Une méthode abstract NE DOIT PAS contenir de code !

    Une méthode abstract DOIT ÊTRE redéfinie dans les classes héritières,
    et donc elle perd son statue de méthode abstract.

    Dans la classe mère , manger et boire ont du code, elle ne sont donc pas abstract à l'inverse de déplacement et crier.
    Tu doit donc les redéfinir et leur donner du code.

    Ce que tu fait pour déplacement dans Félin, et pour crier dans Lion.

    Pour t'aider pense au fait qu'il y ai ou non la présence de code dans ta méthode.

    (petit complément qui j'espère te sera utile)
    Ah ça y’est, j’viens de comprendre à quoi ça sert la canne. En fait ça sert à rien… Du coup ça nous renvoie à notre propre utilité : l’Homme face à l’Absurde !

    -Perceval-

  7. #7
    Membre régulier
    Inscrit en
    Décembre 2010
    Messages
    172
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 172
    Points : 85
    Points
    85
    Par défaut
    un Grand merci à tous ...c'est trés claire maintenant

    A+

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

Discussions similaires

  1. question sur les classes "static"
    Par Asmod_D dans le forum C++
    Réponses: 4
    Dernier message: 05/04/2009, 17h27
  2. Questions sur les classes.
    Par DarkSeiryu dans le forum Windows Forms
    Réponses: 8
    Dernier message: 06/02/2009, 09h21
  3. Un question sur les classes
    Par willycat dans le forum C++
    Réponses: 10
    Dernier message: 22/08/2008, 17h55
  4. Questions sur les classes en C#
    Par greg2 dans le forum C#
    Réponses: 11
    Dernier message: 05/11/2007, 19h57
  5. Question sur les méthodes abstraites
    Par nmathon dans le forum Delphi
    Réponses: 3
    Dernier message: 15/06/2006, 20h30

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