Domanda

È possibile dichiarare un'interfaccia all'interno di una classe astratta?Ho provato questo e sono riuscito a farlo con successo senza alcun errore di compilazione??Nell'uso pratico c'è qualche significato di questo?

Ecco il codice che ho scritto.

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 
{
}
È stato utile?

Soluzione

È possibile dichiarare un'interfaccia all'interno di qualsiasi classe , non solo astratta.L'interfaccia è implicitamente generacodicitagcode, quindi la tua classe di allevamento fornisce un ambito dello spazio dei nomi ed è altrimenti non correlata all'interfaccia.

L'utilità di questo esiste sicuramente e l'ho usato in diverse occasioni.Spesso l'interfaccia è accoppiata a un metodo della stessa classe, quindi i client possono passare le implementazioni di quell'interfaccia al metodo.

Con Java 8 e tipi di interfaccia funzionali La proliferazione delle interfacce locali aumenterà solo.

Altri suggerimenti

Sì, è possibile.Come hai detto, si compila (e immagino venga eseguito), quindi è legale.
Infatti è legale dichiarare una sottointerfaccia in un'interfaccia, o un'enumerazione (ma solo quelle pubbliche, poiché quelle private non hanno alcun senso in un'interfaccia, proprio come i metodi privati).

Per quanto riguarda gli usi pratici:Puoi dichiarare una classe interna privata nella tua classe astratta e usarla nei metodi di detta classe astratta (spero che tu possa pensare a un utilizzo per quello).O due di quelli.E se hai bisogno di un contratto condiviso per entrambi, puoi utilizzare un'interfaccia.Oppure dovresti restituire una cosa specifica che non ha senso al di fuori della classe genitore.

Un esempio più concreto è l'interfaccia Map ed è un'interfaccia secondaria Map.Entry.Alcuni metodi di Map ritorno e Entry, eppure l'immissione non ha senso senza Map, quindi non è un'interfaccia autonoma.Se Map fosse una classe astratta piuttosto che un'interfaccia, avresti esattamente la situazione che hai descritto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top