[newbie] Comparer si une instance fait partie de la classe ...
9 réponses
tsalm
Bonjour,
J'ai un Hashtable dans laquelle je r=E9cup=E9re des valeurs qui sont
d'une classe m=E9re ou d'une classe h=E9rit=E9e.
Mais quand je r=E9cuperes les valeurs et que j'y appele une m=E9thode
toString(), il me donne seulement la m=E9thode d'affichage de la classe
m=E9re.
Je sais que =E7a doit =EAtre une question idiote, mais pour r=E9cuperer
cette instance et utiliser les m=E9thodes correcte, le mieux est-il de
faire une "tentative" de cast en classe h=E9rit=E9e et de r=E9cuperer
l'erreur via une Exception ?
Pour rappel, en Java dans un scénario d'héritage :
A- Les méthodes de même signature sont surchargées par défaut. C'est toujours la surcharge de la classe fille qui prend la main quelque soit la portée.
B- Les champs de même nom sont "cachés" (deux champs cohéxistent mais dans leurs contextes respectifs, pour y accéder il suffit de spécifier la portée choisie par un transtypage adequat). Ceci permet aux méthodes de chaque portée de fonctionner sans ce préoccuper des autres niveaux de la hérarchie ;-)
Ainsi dans l'exemple :
public static class A { public String valeur ="valeurA"; public String test(){ return "testA"; } public String testParent(){ return valeur+"parA"; } public String testFils(){ return valeur+"parA"; } } public static class B extends A{ public String valeur ="valeurB"; public String test(){ return "testB"; } public String testFils(){ return valeur+"parB"; } }
public class Pipo{ public static void main(String[] args) throws Exception { A a = new B(); System.out.println("1:quel test ? "+a.test()); System.out.println("2:quel valeur ? "+a.valeur); System.out.println("3:quel test parent ? "+a.testParent()); System.out.println("4:quel test fils ? "+a.testFils()); } }
On a :
1:quel test ? testB 2:quel valeur ? valeurA 3:quel test parent ? valeurAparA 4:quel test fils ? valeurBparB
Le n°4 montre bien que malgrés la précision de la portée sur A, c'est la méthode testFils de B (sa classe réelle) qui est appelée, exposant ainsi son propre champ valeur du contexte.
Bon tests ...
A+
TM
Bonjour,
J'ai un Hashtable dans laquelle je récupére des valeurs qui sont d'une classe mére ou d'une classe héritée. Mais quand je récuperes les valeurs et que j'y appele une méthode toString(), il me donne seulement la méthode d'affichage de la classe mére.
Je sais que ça doit être une question idiote, mais pour récuperer cette instance et utiliser les méthodes correcte, le mieux est-il de faire une "tentative" de cast en classe héritée et de récuperer l'erreur via une Exception ?
D'avance merci pour vos eclarcissement
TSalm
Bonjour,
Pour rappel, en Java dans un scénario d'héritage :
A- Les méthodes de même signature sont surchargées par défaut. C'est
toujours la surcharge de la classe fille qui prend la main quelque soit
la portée.
B- Les champs de même nom sont "cachés" (deux champs cohéxistent mais
dans leurs contextes respectifs, pour y accéder il suffit de spécifier
la portée choisie par un transtypage adequat). Ceci permet aux méthodes
de chaque portée de fonctionner sans ce préoccuper des autres niveaux de
la hérarchie ;-)
Ainsi dans l'exemple :
public static class A {
public String valeur ="valeurA";
public String test(){
return "testA";
}
public String testParent(){
return valeur+"parA";
}
public String testFils(){
return valeur+"parA";
}
}
public static class B extends A{
public String valeur ="valeurB";
public String test(){
return "testB";
}
public String testFils(){
return valeur+"parB";
}
}
public class Pipo{
public static void main(String[] args) throws Exception {
A a = new B();
System.out.println("1:quel test ? "+a.test());
System.out.println("2:quel valeur ? "+a.valeur);
System.out.println("3:quel test parent ? "+a.testParent());
System.out.println("4:quel test fils ? "+a.testFils());
}
}
On a :
1:quel test ? testB
2:quel valeur ? valeurA
3:quel test parent ? valeurAparA
4:quel test fils ? valeurBparB
Le n°4 montre bien que malgrés la précision de la portée sur A, c'est la
méthode testFils de B (sa classe réelle) qui est appelée, exposant ainsi
son propre champ valeur du contexte.
Bon tests ...
A+
TM
Bonjour,
J'ai un Hashtable dans laquelle je récupére des valeurs qui sont
d'une classe mére ou d'une classe héritée.
Mais quand je récuperes les valeurs et que j'y appele une méthode
toString(), il me donne seulement la méthode d'affichage de la classe
mére.
Je sais que ça doit être une question idiote, mais pour récuperer
cette instance et utiliser les méthodes correcte, le mieux est-il de
faire une "tentative" de cast en classe héritée et de récuperer
l'erreur via une Exception ?
Pour rappel, en Java dans un scénario d'héritage :
A- Les méthodes de même signature sont surchargées par défaut. C'est toujours la surcharge de la classe fille qui prend la main quelque soit la portée.
B- Les champs de même nom sont "cachés" (deux champs cohéxistent mais dans leurs contextes respectifs, pour y accéder il suffit de spécifier la portée choisie par un transtypage adequat). Ceci permet aux méthodes de chaque portée de fonctionner sans ce préoccuper des autres niveaux de la hérarchie ;-)
Ainsi dans l'exemple :
public static class A { public String valeur ="valeurA"; public String test(){ return "testA"; } public String testParent(){ return valeur+"parA"; } public String testFils(){ return valeur+"parA"; } } public static class B extends A{ public String valeur ="valeurB"; public String test(){ return "testB"; } public String testFils(){ return valeur+"parB"; } }
public class Pipo{ public static void main(String[] args) throws Exception { A a = new B(); System.out.println("1:quel test ? "+a.test()); System.out.println("2:quel valeur ? "+a.valeur); System.out.println("3:quel test parent ? "+a.testParent()); System.out.println("4:quel test fils ? "+a.testFils()); } }
On a :
1:quel test ? testB 2:quel valeur ? valeurA 3:quel test parent ? valeurAparA 4:quel test fils ? valeurBparB
Le n°4 montre bien que malgrés la précision de la portée sur A, c'est la méthode testFils de B (sa classe réelle) qui est appelée, exposant ainsi son propre champ valeur du contexte.
Bon tests ...
A+
TM
Bonjour,
J'ai un Hashtable dans laquelle je récupére des valeurs qui sont d'une classe mére ou d'une classe héritée. Mais quand je récuperes les valeurs et que j'y appele une méthode toString(), il me donne seulement la méthode d'affichage de la classe mére.
Je sais que ça doit être une question idiote, mais pour récuperer cette instance et utiliser les méthodes correcte, le mieux est-il de faire une "tentative" de cast en classe héritée et de récuperer l'erreur via une Exception ?
D'avance merci pour vos eclarcissement
TSalm
said.rabie
tu peux metre ton code stp :) car tout depend de comment tu fais le toString();
tu peux metre ton code stp :)
car tout depend de comment tu fais le toString();
je vais voir et debuguer ton code ce soir chez moi :)
said.rabie
LOL
c'etai pas un probleme de polymorphisme :)
toute les instance que tu cree etait de la class Produit aucune instance de la class ProduitDegriffe n'etait cree et donc c'etai normal que ton code ne marche pas.
c'etai surement une erreue du copier / coller :)
donc dans la class FenProduitDerive
protected void ajoutDansClasseApp() { classAppelante.ajoutProduit( new ProduitDegriffe(Produit.getNewCode() + "", txtLibelle.getText(),
toute les instance que tu cree etait de la class Produit aucune
instance de la class ProduitDegriffe n'etait cree et donc c'etai normal
que ton code ne marche pas.
c'etai surement une erreue du copier / coller :)
donc dans la class FenProduitDerive
protected void ajoutDansClasseApp() {
classAppelante.ajoutProduit(
new ProduitDegriffe(Produit.getNewCode() + "",
txtLibelle.getText(),
toute les instance que tu cree etait de la class Produit aucune instance de la class ProduitDegriffe n'etait cree et donc c'etai normal que ton code ne marche pas.
c'etai surement une erreue du copier / coller :)
donc dans la class FenProduitDerive
protected void ajoutDansClasseApp() { classAppelante.ajoutProduit( new ProduitDegriffe(Produit.getNewCode() + "", txtLibelle.getText(),