Abstract methods

Résolu
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 - 20 janv. 2007 à 16:06
cs_bouba Messages postés 518 Date d'inscription dimanche 2 décembre 2001 Statut Membre Dernière intervention 10 novembre 2007 - 20 janv. 2007 à 19:45
Salut:



J'ai une chose que je comprends pas:




Normalement une méthode abstraite n'a pas de corps (définition) dans la classe où elle est définie et c'est les classe qui en dérivent qui doivent l'implémenter.



Mais en regardant par exemple la classe Toolkit, il y a des méthodes telle que:








public abstract
ColorModel getColorModel ();








ColorModel cm = Toolkit.getDefaultToolkit ().getColorModel ();







qu'on peut utiliser sans à les redéfinir quoiqu'elle est abstraite.






Pouvez vous me dire pourquoi?






__________________________________________________________
A.B. :  Savoir c'est être heureux ...

4 réponses

cs_bouba Messages postés 518 Date d'inscription dimanche 2 décembre 2001 Statut Membre Dernière intervention 10 novembre 2007 3
20 janv. 2007 à 17:45
D'après la doc de Java 1.4.2:

"If there is a system property named "awt.toolkit", that property is treated as the name of a class that is a subclass of Toolkit." => Donc l'instance de la classe retournée correspond à une classe fille ou la méthode getColorModel doit être redéfinie.


La suite de la documentation Java indique:

"If the system property does not exist, then the default toolkit used is the class named "sun.awt.motif.MToolkit", which is a motif implementation of the Abstract Window Toolkit." => Ici aussi le Toolkit retournée n'est pas une instance de la classe Toolkit mais bien l'instance d'une fille de celle-ci.



Voilà, donc dans aucun cas la méthode ne retourne une "instance de classe abstraite" (ce qui est impossible !!!!).



Bouba.
3
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
20 janv. 2007 à 17:58
Salut:



Conclusion:




Si une classe abstraite dispose d'un pseudo-constructeur -méthode statique- alors ceci provient d'une classe fille implémentant les méthodes abstraites.




__________________________________________________________
A.B. :  Savoir c'est être heureux ...
3
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
20 janv. 2007 à 17:54
Salut:

Bien. Donc ceci s'applique aux autres classes comme Toolkit.




__________________________________________________________
A.B. :  Savoir c'est être heureux ...
0
cs_bouba Messages postés 518 Date d'inscription dimanche 2 décembre 2001 Statut Membre Dernière intervention 10 novembre 2007 3
20 janv. 2007 à 19:45
Hum, je ne suis pas sur d'avoir bien pigé ce que tu viens de dire.

"Si une classe abstraite dispose d'un pseudo-constructeur - méthode statique- alors ceci provient d'une classe fille implémentantn les méthodes abstraites."

Le fait que la classe Toolkit dispose d'une méthode statique n'implique pas du tout que l'appel à cette méthode se fera à partir d'un classe fille de celle-ci. C'est bien à partir de la classe Toolkit que tu va appeler la méthode getDefaultTookit(), comme la méthode est statique elle est commune à toutes les instances de la classe, ou aucune, c'est une fonction qui n'est "pas appelée à partir d'un objet mais d'une classe".

La méthode statique getDefaultTookit() retourne une instance d'une classe fille de la classe Toolkit et nera donc un appel au constructeur de MToolkit par exemple. La fonction pourrait ressembler à ceci:

public static Toolkit getDefaultTookit() {
    Toolkit tl = new MToolkit(...);

    ...
    ...

    return tl;
}

Tu vois ou je veux en venir ?

Bouba.
0
Rejoignez-nous