Forcer les classes filles à avoir des méthodes/attributs static

Forcer les classes filles à avoir des méthodes/attributs static - Java - Programmation

Marsh Posté le 11-01-2011 à 11:50:29    

Bonjour,
 
Je souhaiterai déclarer une classe (abstraite) dont toutes les filles devraient implémenter des méthodes (voire attributs) qui seraient static. Le but est de forcer les filles a redéfinir ces méthodes/attributs.
Exemple de ce que je voudrais (code non fonctionnel) :
Classe mère qui "déclare" les méthodes/attributs à redéfinir :

Code :
  1. public abstract class ClasseMere {
  2. public static final String val; // à redéfinir d'une manière static
  3. public static abstract String myComment(String param); // à redéfinir d'une manière static
  4. public abstract String formatData(); // à redéfinir non statiquement
  5. }


Première classe fille qui redéfinit les méthodes/attributs :

Code :
  1. public class ClasseFille1 {
  2. public static final String val = "F1"; // attribut static redéfini
  3. // attributs de ma classe
  4. public ClasseFille1(...) {
  5.  // création d'une instance
  6. }
  7. public static String myComment(String param) { // méthode static redéfinie
  8.  // code spécifique
  9. }
  10. public String formatData() {
  11.  // traitement spécifique
  12. }
  13. }


Deuxième classe fille qui redéfinit les méthodes/attributs :

Code :
  1. public class ClasseFille2 {
  2. public static final String val = "F2"; // attribut static redéfini
  3. // attributs de ma classe
  4. public ClasseFille2(...) {
  5.  // création d'une instance
  6. }
  7. public static String myComment(String param) { // méthode static redéfinie
  8.  // code spécifique
  9. }
  10. public String formatData() {
  11.  // traitement spécifique
  12. }
  13. }


Merci d'avance pour votre aide :)

Reply

Marsh Posté le 11-01-2011 à 11:50:29   

Reply

Marsh Posté le 11-01-2011 à 16:44:53    

Le principe d'héritage ne s'applique pas aux éléments static (et donc pas de mécanisme d'abstract).
 
Même si tu peux définir des méthodes static ayant la même signature dans 2 classes ayant un héritage, ces 2 méthodes n'ont aucun lien.
 
Ci-dessous un petit exemple pour montrer à quel point c'est dangereux.
 

Code :
  1. public class Mere {
  2.   public static void toto() {
  3.     System.out.println("Mere:toto()" );
  4.   }
  5. }


 

Code :
  1. public class Fille extends Mere {
  2.   public static void toto() {
  3.     System.out.println("Fille:toto()" );
  4.   }
  5.   public static final void main(String[] args) {
  6.     Fille fille = new Fille();
  7.     fille.toto();
  8.     Mere mere = fille;
  9.     mere.toto();
  10.   }
  11. }


Résultat :

Code :
  1. Fille:toto()
  2. Mere:toto()


...
 
Donc pour appeler la méthode toto de Fille il faudrait caster l'objet en Fille.
 
Je ne sais pas si ça a voir avec ce que tu veux faire mais pour moi utiliser le même nom de méthode static dans 2 classes = dangereux + inutile

Reply

Marsh Posté le 12-01-2011 à 19:34:10    

Merci pour ce retour :)
Je comprends bien ton exemple, mais je ne fait jamais appel à des méthodes static depuis une instance d'une classe, donc pas de problème à ce niveau là : je sais exactement quelle classe fille je dois appeler et quand.
Mon seul souci est de forcer un "template" pour toutes les classes filles.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed