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 :

Class et methodes virtuelles, surcharge


Sujet :

Langage Java

  1. #1
    Membre confirmé
    Inscrit en
    Mai 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 673
    Points : 624
    Points
    624
    Par défaut Class et methodes virtuelles, surcharge
    Bonjour,

    Ayant il y a fort longtemps fait un peu de C++ et étant en train de passer a Java, je me pose quelques questions élémentaires d'OO :

    Comment définit-on une class virtuelle en JAVA ? Même question pour une méthode normale ?

    Quand on déclare une méthode virtuelle, faut-il déclarer la class comme étant virtuelle ?

    Concernant la surcharge de méthode, cela fonctionne t-il comme en C++ ou y a-t-il une méthode particulière ?

    Est-ce que la methode super peut également marcher dans des méthodes non constructeur ?

    Merci d'avance pour votre aide.
    Si vous avez un message d'erreur, n'oubliez pas de le lire, la réponse à votre problème est surement dedans !

  2. #2
    Expert éminent sénior
    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
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par gloubi Voir le message
    Comment définit-on une class virtuelle en JAVA ? Même question pour une méthode normale ?
    Il n'y en a pas besoin : avec Java par défaut les classes et les méthodes sont déjà virtuelles (sauf les méthodes private bien sûr).

    En fait le résonnement est inversé : on utilise le mot-clef final pour indiqué que la classe/méthode ne peut plus être hérité/redéfini.


    Citation Envoyé par gloubi Voir le message
    Concernant la surcharge de méthode, cela fonctionne t-il comme en C++ ou y a-t-il une méthode particulière ?
    Surcharge ou Redéfinition ?
    • Surcharge : méthode de même nom mais avec des paramètres différents
    • Redéfinition : méthode dans une classe fille qui remplace la méthode "identique" dans la classe parente


    Quoi qu'il en soit dans les deux cas je ne pense pas qu'il y ai de grosses différences avec le C++...

    Citation Envoyé par gloubi Voir le message
    Est-ce que la methode super peut également marcher dans des méthodes non constructeur ?
    Il n'y a pas vraiment de méthode super, mais on peut bien l'utiliser dans des méthodes.

    • Dans un constructeur super() (avec d'éventuels paramètres) permet d'appeler le constructeur parent.
    • Dans un constructeur ou n'importe quel méthode d'instance, super (sans parenthèse) permet l'appel d'un attribut ou d'une méthode de la classe parente.



    a++

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 673
    Points : 624
    Points
    624
    Par défaut
    Je parlais en effet de la redéfinition, et non de la surcharge, autant pour moi (d'ou la question sur super)...

    Merci pour ces réponses !
    Si vous avez un message d'erreur, n'oubliez pas de le lire, la réponse à votre problème est surement dedans !

  4. #4
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    A noter que pour le virtuel pure, il faut utiliser le mot cle abstract devant le nom de la classe et le nom de la methode (qui n'a donc pas de corps).

    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
     
    public abstract class TrucAbstrait {
      public final void faireUnTruc() {
        [...]
        faireQqChose();
        [...]
      }
     
      /** Faire quelques chose !
      */
      protected abstract void faireQqChose();
    }
     
    public class TrucConcret extends TrucAbstrait {
     /** {@inheritDoc}
     * Offre une implementation specifique.
    */
    @Override protected void faireQqChose() {
       [...]
     }
    }
    Le mot cle super (different de super()) permet d'appeler la redefinition precedente d'une methode ou d'un membre. Ex :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    /** {@inheritDoc}
    */
    @Override protected void paintComponent(Graphics g) {
      // Dessin de base d'un composant.
      super.paintComponent(g);
      // Dessin customise.
      [...]
    }
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

Discussions similaires

  1. Réponses: 4
    Dernier message: 09/10/2008, 09h04
  2. [Singleton] difference singleton classe avec methodes statiques
    Par matN59 dans le forum Design Patterns
    Réponses: 6
    Dernier message: 15/01/2006, 11h04
  3. Réponses: 5
    Dernier message: 10/03/2005, 17h41
  4. Réponses: 19
    Dernier message: 10/02/2005, 22h43
  5. [Language] Méthodes virtuelle ?
    Par Eltaz dans le forum Langage
    Réponses: 2
    Dernier message: 12/01/2005, 21h43

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