J'ai un probleme de compréhension dans la maniere d'ecrire les constructeurs
lors d'héritage de classes.
Ce sujet a deja ete largement traité dans ce groupe, mais je n'ai pas trouvé
de réponse precise a ma question, donc je m'excuse de re-poster la dessus,
mais j'aimerai comprendre ;) :
Mon probleme :
class MyHashtable extends Hashtable
{
// Aucun constructeur déclaré
// Divers methodes specifiques
....
}
// Dans mon main :
MyHashtable a = new MyHashtable(); // <-- Pas de p
MyHashtalbe b = new MyHashtable(a); // <-- Probleme de compilation
Pour que cela compile il faut declarer dans ma classe MyHashtable les deux
constructeurs. Quelqu'un peut-il m'expliquer ce comportement ? Je comprends
qu'il faille declarer le constructeur par defaut si je declare le
constructeur par recopie, mais je ne comprends pas et ne trouve pas de
reference, au "pourquoi ai-je besoin de declarer le constructeur par recopie
qui existe dans la super classe ?"
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Kupee
Loic LE BLEIS wrote:
Mon probleme :
class MyHashtable extends Hashtable { // Aucun constructeur déclaré
// Divers methodes specifiques .... }
// Dans mon main :
MyHashtable a = new MyHashtable(); // <-- Pas de p
MyHashtalbe b = new MyHashtable(a); // <-- Probleme de compilation
Pour que cela compile il faut declarer dans ma classe MyHashtable les deux constructeurs. Quelqu'un peut-il m'expliquer ce comportement ? Je comprends qu'il faille declarer le constructeur par defaut si je declare le constructeur par recopie, mais je ne comprends pas et ne trouve pas de reference, au "pourquoi ai-je besoin de declarer le constructeur par recopie qui existe dans la super classe ?"
On hérite pas des constructeurs tout simplement, on peut les appeler a partir d'en dessous (c'est même obligatoire pour instantier la classe) mais on en hérite pas.
Loic LE BLEIS wrote:
Mon probleme :
class MyHashtable extends Hashtable
{
// Aucun constructeur déclaré
// Divers methodes specifiques
....
}
// Dans mon main :
MyHashtable a = new MyHashtable(); // <-- Pas de p
MyHashtalbe b = new MyHashtable(a); // <-- Probleme de compilation
Pour que cela compile il faut declarer dans ma classe MyHashtable les deux
constructeurs. Quelqu'un peut-il m'expliquer ce comportement ? Je comprends
qu'il faille declarer le constructeur par defaut si je declare le
constructeur par recopie, mais je ne comprends pas et ne trouve pas de
reference, au "pourquoi ai-je besoin de declarer le constructeur par recopie
qui existe dans la super classe ?"
On hérite pas des constructeurs tout simplement, on peut les appeler a
partir d'en dessous (c'est même obligatoire pour instantier la classe)
mais on en hérite pas.
class MyHashtable extends Hashtable { // Aucun constructeur déclaré
// Divers methodes specifiques .... }
// Dans mon main :
MyHashtable a = new MyHashtable(); // <-- Pas de p
MyHashtalbe b = new MyHashtable(a); // <-- Probleme de compilation
Pour que cela compile il faut declarer dans ma classe MyHashtable les deux constructeurs. Quelqu'un peut-il m'expliquer ce comportement ? Je comprends qu'il faille declarer le constructeur par defaut si je declare le constructeur par recopie, mais je ne comprends pas et ne trouve pas de reference, au "pourquoi ai-je besoin de declarer le constructeur par recopie qui existe dans la super classe ?"
On hérite pas des constructeurs tout simplement, on peut les appeler a partir d'en dessous (c'est même obligatoire pour instantier la classe) mais on en hérite pas.
Emmanuel Bourg
Quelques règles à garder en tête avec les constructeurs :
1. les constructeurs ne sont pas hérités
2. si aucun constructeur n'est déclaré un constructeur par défaut e st créé à la compilation (sans paramètre)
3. si un constructeur est déclaré le constructeur par défaut n'est plus automatiquement créé à la compilation
4. tout constructeur d'une sous classe doit appeler un constructeur de la super classe. Si la super classe dispose d'un constructeur par défau t cet appel peut être implicite, si la super classe ne dispose pas de constructeur par défaut l'appel doit être explicite et se trouver ava nt toute opération effectuée par le constructeur.
Ton problème découle de mon premier point, c'est à dire que contrairement aux méthodes (non static ni final) les constructeurs ne sont pas hérités. Tu dois donc définir un constructeur dans ta sous classe acceptant une Hashtable en paramètre.
Emmanuel
Loic LE BLEIS wrote:
Bonjour,
J'ai un probleme de compréhension dans la maniere d'ecrire les constr ucteurs lors d'héritage de classes. Ce sujet a deja ete largement traité dans ce groupe, mais je n'ai pas trouvé de réponse precise a ma question, donc je m'excuse de re-poster la de ssus, mais j'aimerai comprendre ;) :
Mon probleme :
class MyHashtable extends Hashtable { // Aucun constructeur déclaré
// Divers methodes specifiques .... }
// Dans mon main :
MyHashtable a = new MyHashtable(); // <-- Pas de p
MyHashtalbe b = new MyHashtable(a); // <-- Probleme de compilation
Pour que cela compile il faut declarer dans ma classe MyHashtable les d eux constructeurs. Quelqu'un peut-il m'expliquer ce comportement ? Je compr ends qu'il faille declarer le constructeur par defaut si je declare le constructeur par recopie, mais je ne comprends pas et ne trouve pas de reference, au "pourquoi ai-je besoin de declarer le constructeur par re copie qui existe dans la super classe ?"
Merci d'avance :)
Loic
Quelques règles à garder en tête avec les constructeurs :
1. les constructeurs ne sont pas hérités
2. si aucun constructeur n'est déclaré un constructeur par défaut e st
créé à la compilation (sans paramètre)
3. si un constructeur est déclaré le constructeur par défaut n'est plus
automatiquement créé à la compilation
4. tout constructeur d'une sous classe doit appeler un constructeur de
la super classe. Si la super classe dispose d'un constructeur par défau t
cet appel peut être implicite, si la super classe ne dispose pas de
constructeur par défaut l'appel doit être explicite et se trouver ava nt
toute opération effectuée par le constructeur.
Ton problème découle de mon premier point, c'est à dire que
contrairement aux méthodes (non static ni final) les constructeurs ne
sont pas hérités. Tu dois donc définir un constructeur dans ta sous
classe acceptant une Hashtable en paramètre.
Emmanuel
Loic LE BLEIS wrote:
Bonjour,
J'ai un probleme de compréhension dans la maniere d'ecrire les constr ucteurs
lors d'héritage de classes.
Ce sujet a deja ete largement traité dans ce groupe, mais je n'ai pas trouvé
de réponse precise a ma question, donc je m'excuse de re-poster la de ssus,
mais j'aimerai comprendre ;) :
Mon probleme :
class MyHashtable extends Hashtable
{
// Aucun constructeur déclaré
// Divers methodes specifiques
....
}
// Dans mon main :
MyHashtable a = new MyHashtable(); // <-- Pas de p
MyHashtalbe b = new MyHashtable(a); // <-- Probleme de compilation
Pour que cela compile il faut declarer dans ma classe MyHashtable les d eux
constructeurs. Quelqu'un peut-il m'expliquer ce comportement ? Je compr ends
qu'il faille declarer le constructeur par defaut si je declare le
constructeur par recopie, mais je ne comprends pas et ne trouve pas de
reference, au "pourquoi ai-je besoin de declarer le constructeur par re copie
qui existe dans la super classe ?"
Quelques règles à garder en tête avec les constructeurs :
1. les constructeurs ne sont pas hérités
2. si aucun constructeur n'est déclaré un constructeur par défaut e st créé à la compilation (sans paramètre)
3. si un constructeur est déclaré le constructeur par défaut n'est plus automatiquement créé à la compilation
4. tout constructeur d'une sous classe doit appeler un constructeur de la super classe. Si la super classe dispose d'un constructeur par défau t cet appel peut être implicite, si la super classe ne dispose pas de constructeur par défaut l'appel doit être explicite et se trouver ava nt toute opération effectuée par le constructeur.
Ton problème découle de mon premier point, c'est à dire que contrairement aux méthodes (non static ni final) les constructeurs ne sont pas hérités. Tu dois donc définir un constructeur dans ta sous classe acceptant une Hashtable en paramètre.
Emmanuel
Loic LE BLEIS wrote:
Bonjour,
J'ai un probleme de compréhension dans la maniere d'ecrire les constr ucteurs lors d'héritage de classes. Ce sujet a deja ete largement traité dans ce groupe, mais je n'ai pas trouvé de réponse precise a ma question, donc je m'excuse de re-poster la de ssus, mais j'aimerai comprendre ;) :
Mon probleme :
class MyHashtable extends Hashtable { // Aucun constructeur déclaré
// Divers methodes specifiques .... }
// Dans mon main :
MyHashtable a = new MyHashtable(); // <-- Pas de p
MyHashtalbe b = new MyHashtable(a); // <-- Probleme de compilation
Pour que cela compile il faut declarer dans ma classe MyHashtable les d eux constructeurs. Quelqu'un peut-il m'expliquer ce comportement ? Je compr ends qu'il faille declarer le constructeur par defaut si je declare le constructeur par recopie, mais je ne comprends pas et ne trouve pas de reference, au "pourquoi ai-je besoin de declarer le constructeur par re copie qui existe dans la super classe ?"
Merci d'avance :)
Loic
Loic LE BLEIS
Ca y est j'ai compris ;) Merci pour vos réponses :)
Loïc
"Emmanuel Bourg" a écrit dans le message de news: bpa4v7$aa8$ Quelques règles à garder en tête avec les constructeurs :
1. les constructeurs ne sont pas hérités
2. si aucun constructeur n'est déclaré un constructeur par défaut est créé à la compilation (sans paramètre)
3. si un constructeur est déclaré le constructeur par défaut n'est plus automatiquement créé à la compilation
4. tout constructeur d'une sous classe doit appeler un constructeur de la super classe. Si la super classe dispose d'un constructeur par défaut cet appel peut être implicite, si la super classe ne dispose pas de constructeur par défaut l'appel doit être explicite et se trouver avant toute opération effectuée par le constructeur.
Ton problème découle de mon premier point, c'est à dire que contrairement aux méthodes (non static ni final) les constructeurs ne sont pas hérités. Tu dois donc définir un constructeur dans ta sous classe acceptant une Hashtable en paramètre.
Emmanuel
Ca y est j'ai compris ;)
Merci pour vos réponses :)
Loïc
"Emmanuel Bourg" <smanux@lfjr.net> a écrit dans le message de news:
bpa4v7$aa8$1@reader1.imaginet.fr...
Quelques règles à garder en tête avec les constructeurs :
1. les constructeurs ne sont pas hérités
2. si aucun constructeur n'est déclaré un constructeur par défaut est
créé à la compilation (sans paramètre)
3. si un constructeur est déclaré le constructeur par défaut n'est plus
automatiquement créé à la compilation
4. tout constructeur d'une sous classe doit appeler un constructeur de
la super classe. Si la super classe dispose d'un constructeur par défaut
cet appel peut être implicite, si la super classe ne dispose pas de
constructeur par défaut l'appel doit être explicite et se trouver avant
toute opération effectuée par le constructeur.
Ton problème découle de mon premier point, c'est à dire que
contrairement aux méthodes (non static ni final) les constructeurs ne
sont pas hérités. Tu dois donc définir un constructeur dans ta sous
classe acceptant une Hashtable en paramètre.
Ca y est j'ai compris ;) Merci pour vos réponses :)
Loïc
"Emmanuel Bourg" a écrit dans le message de news: bpa4v7$aa8$ Quelques règles à garder en tête avec les constructeurs :
1. les constructeurs ne sont pas hérités
2. si aucun constructeur n'est déclaré un constructeur par défaut est créé à la compilation (sans paramètre)
3. si un constructeur est déclaré le constructeur par défaut n'est plus automatiquement créé à la compilation
4. tout constructeur d'une sous classe doit appeler un constructeur de la super classe. Si la super classe dispose d'un constructeur par défaut cet appel peut être implicite, si la super classe ne dispose pas de constructeur par défaut l'appel doit être explicite et se trouver avant toute opération effectuée par le constructeur.
Ton problème découle de mon premier point, c'est à dire que contrairement aux méthodes (non static ni final) les constructeurs ne sont pas hérités. Tu dois donc définir un constructeur dans ta sous classe acceptant une Hashtable en paramètre.