web-dev-qa-db-fra.com

Pourquoi devrions-nous déclarer les méthodes d'interface publiques?

Lorsque j'implémente une méthode interface, je suis obligé d'en faire une méthode public.

Nous pouvons avoir des cas où nous voulons utiliser soit le default (comme en cas d'accès dans le même paquet) ou protected.

Quelqu'un peut-il expliquer la raison de cette limitation?

32
Vishnu

Les interfaces sont destinées à définir l'API public d'un type - et seulement cela, pas son implémentation. Ainsi, toute méthode (ou membre statique) que vous définissez dans une interface est par définition public.

Puisqu'une interface ne peut contenir aucune implémentation concrète, il n'y a aucun moyen d'appeler des méthodes membres depuis l'intérieur. Et déclarer de telles méthodes, mais leur laisser des appels à des sous-classes ou à des clients totalement indépendants signifierait que votre définition de type est incomplète et fragile. C'est pourquoi si vous avez besoin de définir des membres d'accès protégé ou de package, vous pouvez le faire dans une classe abstraite (qui peut également contenir une implémentation).

54
Péter Török

this fournira peut-être quelques réponses.

À ma connaissance, vous utilisez interfaces pour permettre à des personnes extérieures à votre code d'interagir avec votre code. Pour ce faire, vous devez définir vos méthodes public.

Si vous souhaitez forcer quelqu'un à remplacer un ensemble donné de méthodes privées, vous pouvez déclarer une classe abstraite avec une série de méthodes protégées abstraites.

10
npinti

Une interface est un contrat que la classe qui l'implémente aura les méthodes dans l'interface. L'interface est utilisée pour montrer au reste du programme que cette classe a les méthodes et qu'elles peuvent être appelées

1
nist

EDIT: Cette réponse est destinée aux implémentations d'interface C #. Dans ce cas de Java le scénario est similaire juste que l'analyseur syntaxique veut un mot-clé public mentionné dans l'interface, ce qui est implicitement fait en C #

Les méthodes d'interface sont implicitement publiques en C # car une interface est un contrat destiné à être utilisé par d'autres classes. De plus, vous devez déclarer ces méthodes publiques, et non statiques, lorsque vous implémentez l'interface.

interface IStorable
{
     void Read( );
     void Write(object obj);
}

Notez que les déclarations de méthode IStorable pour Read( ) et Write( ) n'incluent pas de modificateurs d'accès (public, protected ..). En fait, fournir un modificateur d'accès génère une erreur de compilation.

class Document : IStorable
{
     public void Read( )
     {
         //
     }
     public void Write(object obj)
     {
         //
     }
}

Pensez simplement aux interfaces comme Contrats à implémenter comme public

0
Jerric Lyns John