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 exception


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté Avatar de g0up1l
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 341
    Par défaut héritage et exception
    Bonsoir à tous,

    Dans ma classe A, le constructeur envoie une exception si l'initialisation de certaines variables a foiré.
    Jusque là, ça va.

    Mais j'ai aussi une classe B qui hérite de A, et dans le constructeur de B, j'appelle le constructeur de la classe mère :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
    //constructeur de A
    public A( param1 a, param2 b) throws Exception
    {
    ....
    }
     
    //B hérite de A
    //constructeur de B
    public B( param1 a, param2 b)
    {
    super(a,b);
    }
    Le problème dans le constructeur de B, c'est que le compilateur me dit que : je dois catcher l'exception lancée par le constructeur de A.
    Je mets donc en place un try -catch qui englobe le super(a,b).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public B( param1 a, param2 b)
    {
    try{
    super(a,b);
    }catch(Exception e)
    {
    ...
    }
    }
    Mais alors, le compilo s'énerve et dit que 'super' doit être la première instruction du bloc, que faire ?

  2. #2
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Par défaut
    Un constructeur qui renvoie une Exception, c'est pas glop!

    Ne peux-tu pas vraiment pas éviter de programmer comme ça?
    Avant de poster, pensez à regarder la FAQ, les tutoriaux, la Javadoc (de la JRE que vous utilisez) et à faire une recherche
    Je ne réponds pas aux questions techniques par MP: les forums sont faits pour ça
    Mes articles et tutoriaux & Mon blog informatique

  3. #3
    Membre expérimenté Avatar de g0up1l
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 341
    Par défaut
    Ben ouais, j'avais fait ça au pif ( gadget ). Mais sinon, comment veux-tu détecter que la construction de ton objet a foiré ?

  4. #4
    Membre Expert
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Par défaut
    Ca parait logique ( enfin pour moi ) :
    "public A(...)throws Exception" lève une exception
    si B extends A et que tu as un "super(...)", alors "public B(...)" devra également lever une exception.
    Essayons de traduire en français :
    Si la création de A échoue alors la création de B ( qui est un A aussi ) doit également échouer non ?

  5. #5
    Membre expérimenté Avatar de g0up1l
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 341
    Par défaut
    Citation Envoyé par iohack
    Ca parait logique ( enfin pour moi ) :
    "public A(...)throws Exception" lève une exception
    si B extends A et que tu as un "super(...)", alors "public B(...)" devra également lever une exception.
    Essayons de traduire en français :
    Si la création de A échoue alors la création de B ( qui est un A aussi ) doit également échouer non ?
    Sauf qu'en l'occurence tu n'as même pas le loisir de pouvoir compiler ta classe B vu que le compilo t'oblige à cacher l'exception envoyée par le constructeur de A.
    Et si tu mets un try-catch, il gueule car la première instruction doit être 'super'.

  6. #6
    Membre Expert
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 348
    Par défaut
    Ben non tu as la possibilité de déclarer que le constructeur de B lui aussi throws une Exception ... ce qui me semble logique aussi (comme iohack)

Discussions similaires

  1. Exceptions, héritage et méthodes virtuelles
    Par Nuwanda dans le forum C++
    Réponses: 13
    Dernier message: 23/05/2006, 12h06
  2. Réponses: 3
    Dernier message: 19/01/2006, 14h49
  3. Héritage entre Forms
    Par BarBal dans le forum Composants VCL
    Réponses: 7
    Dernier message: 29/08/2002, 17h44
  4. Réponses: 5
    Dernier message: 12/06/2002, 15h12
  5. c: gestion des exceptions
    Par vince_lille dans le forum C
    Réponses: 7
    Dernier message: 05/06/2002, 14h11

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