Pregunta

¿Es posible declarar una interfaz dentro de una clase abstracta?Intenté esto y pude hacerlo con éxito sin ningún error de compilación.En el uso práctico, ¿tiene esto algún significado?

Aquí está el código que he escrito.

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 
{
}
¿Fue útil?

Solución

Puede declarar una interfaz dentro de cualquier clase , no solo abstracto.La interfaz es implícitamente static, por lo que su clase de adjuntura solo está proporcionando un alcance de espacio de nombres y no está relacionado con la interfaz.

La utilidad de esto existe definitivamente y lo he usado en varias ocasiones.A menudo, la interfaz está acoplada a un método de la misma clase, por lo que los clientes pueden pasar implementaciones de esa interfaz al método.

Con Java 8 y Tipos de interfaz funcional La proliferación de las interfaces locales solo aumentará.

Otros consejos

Sí, es posible.Como dijiste, se compila (y me imagino que se ejecuta), por lo que es legal.
De hecho, es legal declarar una subinterfaz en una interfaz o una enumeración (pero solo las públicas, ya que las privadas no tienen ningún sentido en una interfaz, al igual que los métodos privados).

En cuanto a usos prácticos:Puedes declarar una clase interna privada en tu clase abstracta y usarla en métodos de dicha clase abstracta (espero que puedas pensar en un uso para eso).O dos de esos.Y si necesita un contrato compartido para ambos, puede utilizar una interfaz.O necesitaría devolver algo específico que no tenga sentido fuera de la clase principal.

Un ejemplo más práctico es la interfaz. Map y su subinterfaz Map.Entry.Algunos métodos de Map regresar y Entry, sin embargo, la entrada no tiene sentido sin Map, por lo que no es una interfaz independiente.Si Map Si fuera una clase abstracta en lugar de una interfaz, tendría exactamente la situación que describió.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top