Les méthodes d'une interface ne peuvent pas être protected?

Les méthodes d'une interface ne peuvent pas être protected? - Java - Programmation

Marsh Posté le 22-04-2004 à 10:46:02    

Je risque de m'en prendre plein la tête. Tant pis.
Les méthodes d'une interface ne peuvent donc être que public, ou "portée par défaut" ? J'suis à peu près sur là. Je pourrais avoir confirmation ?


Message édité par El_gringo le 22-04-2004 à 11:12:23
Reply

Marsh Posté le 22-04-2004 à 10:46:02   

Reply

Marsh Posté le 22-04-2004 à 10:49:50    

ou est l'intéret d'une méthode privée pour une interface ?
 
Une interface, c'est un contrat que tu passe avec les objets utilisateurs, donc tu ne peux que spécifier ce que tu leur montre.

Reply

Marsh Posté le 22-04-2004 à 10:55:03    

ratai, elle sont publiques s'il n'y a pas de mot-clef "public" :
http://java.sun.com/docs/books/jls [...] html#78651
 

Citation :

Every method declaration in the body of an interface is implicitly public.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 22-04-2004 à 10:57:04    

Par contre, une interface elle-même peut être publique, privée ou package-visible. Pour restreindre l'accès à certaines méthodes, tu fais une interface public, et tu lui fais une sous-interface avec la visibilité que tu veux et les méthodes à protéger.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 22-04-2004 à 11:00:45    

El_gringo a écrit :

Je risque de m'en prendre plein la tête. Tant pis.
Les méthodes d'une interface ne peuvent donc être que public, ou "portée par défaut" ? J'suis à peu près sur là. Je pourrais avoir confirmation ?


 
toi tu n'as pas compris ce que c'était une méthode privée visiblement ;)
 
Pour countourne ton problème  
 
Interface avec les méthode publiques -> Abstract class avec des méthodes protected si tu en as besoins -> tes implémentations

Reply

Marsh Posté le 22-04-2004 à 11:08:52    

lorill a écrit :

ou est l'intéret d'une méthode privée pour une interface ?
 
Une interface, c'est un contrat que tu passe avec les objets utilisateurs, donc tu ne peux que spécifier ce que tu leur montre.


 
L'intéret dans mon cas : développement d'une API. Je veux forcer à implémenter des méthodes, sans pour autant que ces méthodes soit "exposées" aux autres classes. tu vois l'intéret ?

Reply

Marsh Posté le 22-04-2004 à 11:09:50    

nraynaud a écrit :

ratai, elle sont publiques s'il n'y a pas de mot-clef "public" :
http://java.sun.com/docs/books/jls [...] html#78651
 

Citation :

Every method declaration in the body of an interface is implicitly public.




 
Tient !? étrange. Dans les sources du JDK, 1 fois sur 2 il y a ou il y a pas le mot clé "public". J'aurais pensé que ça avait une intéret quand même.

Reply

Marsh Posté le 22-04-2004 à 11:11:46    

DarkLord a écrit :

toi tu n'as pas compris ce que c'était une méthode privée visiblement ;)


 
Pourquoi tu dis ça !???
Ha oui, private, c'est ridicule pour une interface. Mais pour protected, je maintient.

Reply

Marsh Posté le 22-04-2004 à 11:12:00    

El_gringo a écrit :

Tient !? étrange. Dans les sources du JDK, 1 fois sur 2 il y a ou il y a pas le mot clé "public". J'aurais pensé que ça avait une intéret quand même.


 
à part rendre le code source confus, je ne vois aucun autre intérêt :/

Reply

Marsh Posté le 22-04-2004 à 11:13:11    

El_gringo a écrit :

L'intéret dans mon cas : développement d'une API. Je veux forcer à implémenter des méthodes, sans pour autant que ces méthodes soit "exposées" aux autres classes. tu vois l'intéret ?


oui, mais ce n'est plus une interface pour les autres. Soit tu fais comme l'a dit nraynaud, soit tu passes par une classe abstraite (l'implémentation n'a rien a faire dans une interface)

Reply

Marsh Posté le 22-04-2004 à 11:13:11   

Reply

Marsh Posté le 22-04-2004 à 11:19:06    

DarkLord a écrit :

à part rendre le code source confus, je ne vois aucun autre intérêt :/

pareil, laisser 2 mots clefs inutiles dans la grammaire, je trouve ça con.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 22-04-2004 à 11:21:05    

lorill a écrit :

oui, mais ce n'est plus une interface pour les autres. Soit tu fais comme l'a dit nraynaud, soit tu passes par une classe abstraite (l'implémentation n'a rien a faire dans une interface)


 
Non, ça devient une interface rien que pour la classe, en effet.
Je n'comprend pas ta remarque entre parenthèses!

Reply

Marsh Posté le 22-04-2004 à 11:22:24    

nraynaud a écrit :

pareil, laisser 2 mots clefs inutiles dans la grammaire, je trouve ça con.


 
Ben, maintenant qu'il existe depuis le début du Java, ils peuvent plus le supprimer. C'est l'utiliser une fois sur 2 ce "public" qui est con.

Reply

Marsh Posté le 22-04-2004 à 11:24:11    

nraynaud a écrit :

Par contre, une interface elle-même peut être publique, privée ou package-visible. Pour restreindre l'accès à certaines méthodes, tu fais une interface public, et tu lui fais une sous-interface avec la visibilité que tu veux et les méthodes à protéger.


 
Je vais plutôt faire une classe abstraite. Mais j'aimerai quand même comprendre ce que tu veux dire (j'ai pas compris).

Reply

Marsh Posté le 22-04-2004 à 12:23:02    

El_gringo a écrit :

Non, ça devient une interface rien que pour la classe, en effet.
Je n'comprend pas ta remarque entre parenthèses!


exemple : un lecteur audio
 

Code :
  1. interface Player
  2. {
  3.   public void play(AudioFile file);
  4.   public void pause();
  5.   public void resume();
  6.   public void stop();
  7. }


la on ne dit pas comment faire aux implémenteurs de l'interface, juste ce qu'il faut faire.
 

Code :
  1. abstract class AbstractPlayer
  2. {
  3.   public void play(AudioFile file)
  4.   {
  5.     //appel a split puis process pour chaque frame
  6.     //..
  7.   }
  8.   protected abstract AudioFrames[] splitInFrames(AudioFile file);
  9.   protected abstract processFrame(AudioFrame frame);
  10.   //...
  11. }


la tu impose l'utilisation d'AudioFrames pour la lecture. tu dis donc comment faire pour lire AudioFile.

Reply

Marsh Posté le 22-04-2004 à 12:25:25    

Ok, j'ai saisi.  
Merci à vous.

Reply

Marsh Posté le 22-04-2004 à 13:11:06    

DarkLord a écrit :

à part rendre le code source confus, je ne vois aucun autre intérêt :/

m'enfin !!!
sans le mot clé public la methode est PACKAGE-PROTECTED !!
(ha, ptet pas pour les interfaces, c'est de ça qu'on parle? [:slackerbitch])


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 22-04-2004 à 13:32:33    

the real moins moins a écrit :

m'enfin !!!
sans le mot clé public la methode est PACKAGE-PROTECTED !!
(ha, ptet pas pour les interfaces, c'est de ça qu'on parle? [:slackerbitch])


 
 :sarcastic:

Reply

Marsh Posté le 22-04-2004 à 13:46:22    

the real moins moins a écrit :

m'enfin !!!
sans le mot clé public la methode est PACKAGE-PROTECTED !!
(ha, ptet pas pour les interfaces, c'est de ça qu'on parle? [:slackerbitch])


 
...c'était vraiment très interressant ! :sarcastic:

Reply

Marsh Posté le 22-04-2004 à 13:47:25    

the real moins moins a écrit :

m'enfin !!!
sans le mot clé public la methode est PACKAGE-PROTECTED !!
(ha, ptet pas pour les interfaces, c'est de ça qu'on parle? [:slackerbitch])

http://test1ng.free.fr/yvelepanos/panos/29eac558062fa60709e439f772b5bb5a.png
va lire l'extrait du JLS que j'ai posté plus haut.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 22-04-2004 à 14:01:36    

[:jm@rc]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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