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 : Classe mère instancié via sa fille


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    173
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 173
    Par défaut Héritage : Classe mère instancié via sa fille
    Soit le code suivant :

    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
    class Vehicle {
        public void printSound() {
            System.out.print("vehicle");
        }
    }
     
    class Car extends Vehicle {
        public void printSound() {
            System.out.print("car");
        }
    }
     
    class Bike extends Vehicle {
        public void printSound() {
            System.out.print("bike");
        }
    }
     
    public class Main {
        public static void main(String[] args) {
            Vehicle v = new Car();
            Car c = (Car) v;
     
            v.printSound();
            c.printSound();
        }   
    }
    Qu'affichera ce code?

    D'apres moi, ce code devra afficher vehiculecar,
    D'apres la solution, ce code affichera carcar.

    Je ne comprends pas pourquoi. A ce que je sache, même si on instancie la classe mère en appelant le constructeur de la classe fille, on devra pourtant accéder aux methodes de la mère non?

    Il y a quelque chose que je dois mal comprendre

  2. #2
    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,

    Citation Envoyé par amine_en_france Voir le message
    Je ne comprends pas pourquoi. A ce que je sache, même si on instancie la classe mère en appelant le constructeur de la classe fille, on devra pourtant accéder aux methodes de la mère non?
    Non : en Java toutes les méthodes sont virtuelles. C'est à dire que la méthode exécutée sera réellement déterminé à l'exécution selon le type réel de l'objet, et non pas uniquement à la compilation selon son type déclarée.


    a++

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    173
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 173
    Par défaut
    Merci,
    Je prends note de la correction, mais il me semble avoir vu le contraire.
    Si je retrouve cela, reviendrai en discuter.
    Je mets a résolu.
    Encore merci

  4. #4
    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
    Citation Envoyé par amine_en_france Voir le message
    il me semble avoir vu le contraire.
    Ce ne devait pas être du Java alors


    a++

  5. #5
    Membre Expert
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Par défaut
    Je prends note de la correction, mais il me semble avoir vu le contraire.
    Attention à ne pas confondre l'objet sur lequel est appliqué la méthode, et un objet passé en paramètre ; pour ce dernier, en effet la méthode est choisie à la compilation, donc s'il y avait une méthode :
    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
    43
     
    class Vehicle {
        public void printSound() {
            System.out.print("vehicle");
        }
    }
     
    class Car extends Vehicle {
        public void printSound() {
            System.out.print("car");
        }
    }
     
    class Bike extends Vehicle {
        public void printSound() {
            System.out.print("bike");
        }
    }
     
    class Sound {
        public void printSound(Vehicle v) {
           System.out.print("vehicle");
        }
     
        public void printSound(Car c) {
           System.out.print("car");
        }
     
        public void printSound(Bike b) {
           System.out.print("bike");
        }
    }
     
    public class Main {
        public static void main(String[] args) {
            Vehicle v = new Car();
            Car c = (Car) v;
            Sound s = new Sound();
     
            s.printSound(v);
            s.printSound(c);
        }   
    }
    Là on se retrouverait avec vehiclecar.

  6. #6
    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
    @Rei Ichido : En effet mais ici il ne s'agit plus d'héritage mais de surcharge

    a++

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

Discussions similaires

  1. Appel d'un méthode fille via la classe mère
    Par Porkipic dans le forum Débuter
    Réponses: 10
    Dernier message: 26/12/2014, 15h46
  2. Instance d'une classe fille à partir d'une classe mère
    Par Mathieu Salles dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 17/10/2012, 16h09
  3. Réponses: 7
    Dernier message: 24/02/2011, 13h15
  4. Héritage et association à la fois entre classe mère et fille
    Par jalam dans le forum Diagrammes de Classes
    Réponses: 2
    Dernier message: 12/01/2011, 11h02
  5. Réponses: 6
    Dernier message: 22/07/2010, 15h17

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