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

  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)

  7. #7
    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
    Citation Envoyé par chtig
    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)
    Exact c'est comme ça que je fais.

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