Question

Est-il possible de déclarer une interface à l'intérieur d'une classe abstraite ?.J'ai essayé et j'ai été avec succès en mesure de le faire sans aucune erreur de compilation??Dans la Pratique, l'utilisation est là toute la signification de cela ??

Voici le code que j'ai écrit.

public abstract class X 
{
   public interface abc extends I1 
   {
        public void sum(int i,int j);
   }
}


  public class Impl extends X 
  {
    class InnerImpl implements abc
   {
        @Override
        public int sum(int i, int j)
        {
          return i+j;
        }
   }
 }



public interface I1 
{
}
Était-ce utile?

La solution

Vous pouvez déclarer une interface dans toute classe , pas seulement abstraite.L'interface est implicitement generacodiCodeTagCode, de sorte que votre classe jointe est uniquement fournissant une portée d'espace de noms et est autrement sans rapport avec l'interface.

L'utilité de cela existe définitivement et je l'ai utilisé à plusieurs reprises.Souvent, l'interface est couplée à une méthode de même classe, les clients peuvent donc passer des implémentations de cette interface à la méthode.

avec des types d'interface Java 8 et fonctionnels La prolifération des interfaces locales n'augmentera que.

Autres conseils

Oui c'est possible.Comme vous l'avez dit - elle compile (et j'imagine les pistes), donc c'est légal.
En fait, il est légal pour déclarer une subinterface dans une interface, ou un enum (mais seulement celles du public, comme celles du secteur privé ne font pas de sens dans une interface, tout comme les méthodes privées).

Comme pour les utilisations pratiques:Vous pouvez déclarer un privé intérieur de la classe dans votre classe abstraite et de l'utiliser dans les méthodes de ladite classe abstraite (j'espère que vous pouvez penser à une utilisation pour ça).Ou deux de ceux-ci.Et si vous avez besoin d'un partagées contrat pour les deux - vous pouvez utiliser une interface.Ou vous auriez besoin de retour d'une chose en particulier qui n'a pas de sens en dehors de la classe parent.

Plus terre-à-terre, en est l'exemple d'interface Map et c'est sous-interface Map.Entry.Certaines méthodes de Map retour et Entry, mais l'entrée est vide de sens sans Map, n'est donc pas autonome de l'interface.Si Map est une classe abstraite plutôt que d'une interface vous aurait exactement la situation que vous avez décrite.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top