A voir également:
- Implémentation cbase non disponible
- Cette personne n'est pas disponible sur messenger - Guide
- Epg non disponible - Forum Téléviseurs
- Marketplace n'est pas disponible pour vous ✓ - Forum Facebook
- Marketplace n'est pas disponible pour vous - Forum Facebook
- Non implémenté??!! ✓ - Forum Windows
2 réponses
Les interfaces permettent de regrouper des caractéristiques transverses totalement indépendantes de leur hiérarchie mère/fille. Il est donc possible de manipuler les méthodes définies par l'interface sans savoir le type concret.
Un exemple : si il existe un ordre entre tes objets (c'est à dire qu'on peut avoir un ordre tel que deux objets puissent être considérés comme inférieur, supérieur ou égal l'un à l'autre), alors il suffit d'implémenter l'interface Comparable et toutes les classes et méthodes qui se basent sur cette propriété (pour faire du tri par exemple) pourront manipuler ta classe grâce à l'interface.
Il est possible d'utiliser Arrays.sort ici car le paramètre de la méthode est un Comparable<E>[], comme ça il n'est pas nécessaire de connaître "MaClasse" lors de la création du code de Arrays (ce qui aurait été impossible), il suffit juste de savoir que la méthode compareTo existe, ce qui est possible grâce à l'implémentation de l'interface...
Un exemple : si il existe un ordre entre tes objets (c'est à dire qu'on peut avoir un ordre tel que deux objets puissent être considérés comme inférieur, supérieur ou égal l'un à l'autre), alors il suffit d'implémenter l'interface Comparable et toutes les classes et méthodes qui se basent sur cette propriété (pour faire du tri par exemple) pourront manipuler ta classe grâce à l'interface.
public MaClasse implements Comparable<MaClasse> { public int compareTo(MaClasse x) { ... } } public static void main(String[] args) { MaClasse[] tab = {...}; System.out.println(Arrays.toString(tab)); Arrays.sort(tab); System.out.println(Arrays.toString(tab)); }
Il est possible d'utiliser Arrays.sort ici car le paramètre de la méthode est un Comparable<E>[], comme ça il n'est pas nécessaire de connaître "MaClasse" lors de la création du code de Arrays (ce qui aurait été impossible), il suffit juste de savoir que la méthode compareTo existe, ce qui est possible grâce à l'implémentation de l'interface...
Salut KX,
Merci pour tout le détail. Mais je dois te préciser que je suis débutant en java, par conséquent je ne connais pas grand chose dans la manipulation des tableaux et des List. Pourrais-tu me proposer un autre exemple plus "basique" ?
Si je comprends bien, les interfaces que les classes implémentent sont elles aussi des classes déjà codées et disponibles dans la plate-forme java ?
Cordialement :)
Merci pour tout le détail. Mais je dois te préciser que je suis débutant en java, par conséquent je ne connais pas grand chose dans la manipulation des tableaux et des List. Pourrais-tu me proposer un autre exemple plus "basique" ?
Si je comprends bien, les interfaces que les classes implémentent sont elles aussi des classes déjà codées et disponibles dans la plate-forme java ?
Cordialement :)
Les interfaces ne sont pas des classes, mais plutôt des contraintes pour les classes qui vont les implémenter.
L'idée est celle-ci :
1) J'ai une classe C qui va manipuler des objets O dont je ne connais pas la classe à l'avance, mais pour lesquels je vais devoir utiliser une méthode M qu'ils devront tous avoir.
2) Je créé une interface I définissant la méthode M, et je modifie la classe C de manière à déclarer tous les objets O grâce à l'interface I.
3) Je créé des objets O, venant de classes X ou Y, qui implémentent l'interface I, je peux donc faire appel à la classe C puisque tous les objets ont une méthode M.
Exemple : je veux faire la somme du poids de tout et n'importe quoi
Alors je dois créer une classe Balance qui permet de peser, mais d'abord je dois déterminer une interface qui permet de dire quels objets pourront être pesés :
Ensuite, n'importe quel objet peut utiliser la méthode somme de Balance, sous réserve que la classe implémente la méthode getPoids de l'interface :
Ce qu'il faut bien comprendre dans cet exemple, c'est qu'il y a un développeur de la classe Balance et de l'interface Pesable, et un autre développeur pour les classes Cube, Humain et Test. L'intérêt est de pouvoir fournir une classe Balance aussi souple que possible, en imposant une seule chose, c'est que les objets manipulés disposent d'une méthode getPoids tel que défini par l'interface Pesable.
L'idée est celle-ci :
1) J'ai une classe C qui va manipuler des objets O dont je ne connais pas la classe à l'avance, mais pour lesquels je vais devoir utiliser une méthode M qu'ils devront tous avoir.
2) Je créé une interface I définissant la méthode M, et je modifie la classe C de manière à déclarer tous les objets O grâce à l'interface I.
3) Je créé des objets O, venant de classes X ou Y, qui implémentent l'interface I, je peux donc faire appel à la classe C puisque tous les objets ont une méthode M.
Exemple : je veux faire la somme du poids de tout et n'importe quoi
Alors je dois créer une classe Balance qui permet de peser, mais d'abord je dois déterminer une interface qui permet de dire quels objets pourront être pesés :
public interface Pesable { double getPoids(); } public class Balance { public static double somme(Pesable...all) { double s = 0; for (Pesable p : all) s += p.getPoids(); return s; } }
Ensuite, n'importe quel objet peut utiliser la méthode somme de Balance, sous réserve que la classe implémente la méthode getPoids de l'interface :
public class Cube implements Pesable { public double getPoids() { return 5; } } public class Humain implements Pesable { public double getPoids() { return 75; } } public class Test { public static void main(String[] args) { Cube cube = new Cube(); Humain humain = new Humain(); double s = Balance.somme(cube,humain); // 80 } }
Ce qu'il faut bien comprendre dans cet exemple, c'est qu'il y a un développeur de la classe Balance et de l'interface Pesable, et un autre développeur pour les classes Cube, Humain et Test. L'intérêt est de pouvoir fournir une classe Balance aussi souple que possible, en imposant une seule chose, c'est que les objets manipulés disposent d'une méthode getPoids tel que défini par l'interface Pesable.