Yo,
Alors, j'ai un ensemble de classes (B, C, D, etc.) qui vont hériter d'une classe abstraite, A. Toutes ces sous-classes auront un attribut static "label", car ce que je veux c'est que chaque sous-classe ait un label associé à la classe. Dans toutes ces classes, j'aurais les mutateurs getLabel() et setLabel(). J'aurais voulu factoriser ça mais après quelques essais je me demande si c'est possible. Car si je fais ça :
Classe A : http://pastebin.com/Gzfeka94
Classes B et C : http://pastebin.com/Wg6RfUMU ; http://pastebin.com/KiXjMsBM
Lanceur : http://pastebin.com/c3RErpep
Mon affichage résulte en :
test
test
test
test
test
test
meeeeep
meeeeep
meeeeep
et non en
test
btest
ctest
test
btest
ctest
meeeeep
btest
ctest
comme ce à quoi je m'attendais. Mon explication c'est que le getLabel() n'est pas recopié, il est simplement appelé depuis la classe mère et du coup c'est le label de la classe mère qu'on récupère. Au passage j'avais mis les labels en private pour qu'ils ne soient pas hérités (avec usufruit du moins) de la classe mère, je sais pas vraiment si ça a son intérêt...
Par contre, si je recopie mes getters dans les sous-classes j'ai bien le résultat attendu. Est-ce que vous voyez un moyen de faire sans pour autant avoir à recopier mes getters dans chaque sous-classe ? J'avais pensé à deux choses :
1. Ne pas définir l'attribut label dans la classe mère, seulement faire une méthode abstraite getLabel(). Le problème c'est que ça force à recopier le même getter dans toutes les sous-classes...
2. Passer par une classe intermédiaire qui ferait le binding classe/label via une HashMap, a priori ç devrait faire ce que je veux mais je pense pas que ce soit top conceptuellement parlant...
Est-ce qu'une de ces deux solutions vous parait bonne ou en voyez-vous une autre ?