Bonjour,
Est-il possible de faire un heritage d' Enum.
Par exemple je souhaiterai faire un heritage de cette enum.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 public enum Test { TOTO, TATA, TITI };
Bonjour,
Est-il possible de faire un heritage d' Enum.
Par exemple je souhaiterai faire un heritage de cette enum.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 public enum Test { TOTO, TATA, TITI };
un type Enum est une classe java avec un constructeur "private". Or tout constructeur d'une classe fille appelle forcément l'un des constructeurs de la classe mère, ce qui est impossible à cause de "private". Il faudrait le passer en "protected" mais alors, cela ne vérifie plus les spécifications du type ENUM.
Il me semble qu'a la place, tu peux définir une interface
Et l'implémenter dans la classe de ton choix, enfin si c'est bien ce que tu cherches.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 public interface MesVariables { public final String TOTO= "toto"; public final String TATA= "tata"; public final String TITI= "titi"; }
Techniquement, c'est possible. Mais tu perds les propriétés des enums :
l'enum te permet d'avoir un ensemble limité de valeurs pour un contexte données.
Via ton interface, tu va pouvoir techniquement mélanger des choses qui n'ont aucun rapport entre elles
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 public enum EtatCellule { VIVANT, MORT; }
Tu perds également la possibilité d'avoir la liste des valeurs possibles pour un même énum
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 public interface EtatCellule { String VIVANT= "vivant"; String MORT = "mort"; String sansAucunRapport = "salut !"; }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 EtatCellule.values()
Bonsoir
je sais qu'il perd les propriétés d'enum, je lui ai simplement indiqué une alternative possible.
C'est vrai. Pour le mimer, un ferait plutôt :
Mais bon, de toute façon, la question est justement de savoir comment ajouter de nouvelles valeurs possibles.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 public class EtatCellule { /** Accès limité. */ protected EtatCellule() {} public static final EtatCellule VIVANT = new EtatCellule(); public static final EtatCellule MORT = new EtatCellule(); }
Ca, à partir du moment où on a l'idée "d'étendre" l'enum, c'est inévitable.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 public class EtatCelluleWalkingDead extends EtatCellule { public static final EtatCelluleWalkingDead MORT_VIVANT = new EtatCelluleWalkingDead(); }
Malheureusement, non. La raison est que ca va à l'encontre de l'héritage. En effet, le principe de l'héritage est qu'une classe fille peut etre utilisée la ou est utilisée sa mere. Or, dans le cas de l'héritage d'enum, c'est l'inverse. On pourrait utiliser la mere partout ou la fille est utilisée mais pas le contraire...
Bref, dans ce genre de cas, l'usage est d'utiliser un int et de créer une interface pour regrouper les valeurs que peuvent prendre celui-ci (un peut comme la solution de Laine mais avec int au lieu de String).
Partager