Bonjour,

je ne savais trop comment formuler mon titre donc j'espère que l'explication ci-dessous sera plus claire.

Je possède une arborescence de classes issues de ma couche "model", branchée en hibernate.

Elle ressemble à celà :

Support
├───────┐
Message Annonce
├────┬──┐
Mail Vocal Sms


A un moment donné, je veux utiliser une liste de supports étendus en rajoutant un attribut "selected" (+getter/setter) à mes "Support"

Qqchose du genre
public Class ExtendedSupport extends Support{ boolean selected ...}

Mon problème est que ExtendedSupport ne me permet plus de stocker des objets (ou peut-être est-ce là ma première erreur?) hérités de support (de type Message ou Annonce).
A moins de me tromper donc, je ne peux pas faire
Code : Sélectionner tout - Visualiser dans une fenêtre à part
ExtendedSupport e = new Sms();
J'ai pourtant besoin de réaliser une extension de ma classe mère sans toucher à celle-ci, et de pouvoir appeler sur une List<ExtendedSupport> la méthode propre à chaque objet "stocké" dans cette liste.... et c'est là que je pêche.
En gros, j'aurais besoin de faire qqchose du genre (incorrect en l'occurence):

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
 
@Entity
@Table(name="support")
@Inheritance(strategy=InheritanceType.JOINED)
@DiscriminatorColumn(name="DTYPE")
public Class Support {
    // plein d'attributs + getters/setters
    public abstract void doSomething(); // propre à chaque héritier
}
...
public Class ExtendedSupport extends Support{
    private boolean selected; // + getter/setter
}
 
...
List<ExtendedSupport> allExtendedSupports ;
public void monInit{
    List<Support> allSupports = supportService.getAllSupports();
    allExtendedSupports = new ArrayList()<>;
 
    for(Support support : allSupports ){
        ExtendedSupport e = support;
        e.setSelected(true);
        allExtendedSupports.add(e);
    }
}
...
 
uneAutreMethode(){
    for(ExtendedSupport support : allExtendedSupports ){
        support.doSomething();
    }
}
Voilà.... j'espère que j'ai été clair.
Si un expert a une idée?

PS : j'ai bien pensé à recopier le résultat des méthodes propres à chaque objet hérité de support dans la nouvelle instance de "ExtendedSupport", mais ça représente beaucoup de méthodes, et surtout le résultat peut changer entre la méthode "monInit" et "uneAutreMethode".
Je ne peux pas non plus modifier ma classe mère (interdiction de toucher au modèle!).