2011-05-09 18 views

Respuesta

21

esto estoy copiando y pegando desde algún tipo de relación (i anterior hice y compartiendo con ustedes) puede ser que usted puede ayudar un poco.

1)

interface employee{ 
class Role{ 
     public String rolename; 
     public int roleId; 
} 
Role getRole(); 
// other methods 
} 

En la interfaz anterior que son vinculantes para el papel de tipo fuertemente a la interfaz empleado (employee.Role). 2) Con una clase estática dentro de una interfaz, tiene la posibilidad de acortar un fragmento de programación común: verificar si un objeto es una instancia de una interfaz y, si es así, llamar a un método de esta interfaz. Mira este ejemplo:

public interface Printable { 
    void print(); 

    public static class Caller { 
     public static void print(Object mightBePrintable) { 
       if (mightBePrintable instanceof Printable) { 
         ((Printable) mightBePrintable).print(); 
       } 
     } 
    } 
} 

Ahora, en lugar de hacer esto:

void genericPrintMethod(Object obj) { 
    if (obj instanceof Printable) { 
     ((Printable) obj).print(); 
    } 
} 

puede escribir:

void genericPrintMethod(Object obj) { 
     Printable.Caller.print(obj); 
    } 
5

Organización.

Especificación de una clase dentro de un interfaz que los lazos de clase directamente a la interfaz - clientes que utilizan esa interfaz tendrán acceso a esa clase y toda la funcionalidad que proporciona.

He visto el patrón de una clase dentro de una interfaz realmente solo en Java 1.4 y versiones inferiores para proporcionar un tipo enumerado que acompañe a la interfaz, ya que la interfaz solo puede usar la clase y la clase puede protegerse , los clientes que usan la interfaz solo pueden aceptar las instancias de la clase definida en la interfaz como los valores enumerados. Ese es el único ejemplo que se me ocurre: estoy seguro de que existen otros, pero es raro que vea una clase dentro de una interfaz utilizada.

Para la caja volteada, sigue siendo organización. Especificar una interfaz dentro de una clase significa que solo esa clase debe usar la interfaz. Que otras clases e interfaces aún pueden usar esa interfaz, dependiendo de su nivel de acceso, no es el punto - la organización documenta el intento de la interfaz - para ser utilizado solo en la clase que lo contiene.

Si es útil fuera de esa clase, hay que mueve de forma adecuada a su propio tipo. Por lo tanto, ambos usos son raros, pero su uso es principalmente para organizar el código y documentar su intención directamente a través de la sintaxis de Java.

+0

Creo que algunos fragmentos de código pueden ser útiles aquí. –

+0

Creo que se proporcionó un ejemplo en el http://stackoverflow.com/a/10481539/1083704 – Val

1

Si alguna funcionalidad clase está estrechamente asociar con cualquier interfaz en esa situación que declarar una clase dentro de una interfaz.

algún tiempo también es útil para proporcionar implementación por defecto del método abstracto en el interior de la interfaz.

0

la creación de clases dentro de la interfaz de programador para permitir que tienen restricciones en la clase, es decir, que la clase interna es accesible sólo si ponemos en práctica esa interfaz.

+0

No, no es cierto, podemos acceder a las clases internas sin implementar también - 'InterfaceName.ClassName a = new InterfaceName.ClassName (); a.print (10); ' –

3

Si la funcionalidad de una clase está estrechamente asociado con una interfaz y no vamos a utilizar esa clase en cualquier lugar, entonces podemos definir una clase dentro de una interfaz.

package PracticeTest; 

public interface VehicleService { 
    public void repair(Vehicle v); 
    public class Vehicle{ 
     String vehicleModel; 
     String vehicleNumber; 
     public Vehicle(String vehicleModel, String vehicleNumber) { 
     super(); 
     this.vehicleModel = vehicleModel; 
     this.vehicleNumber = vehicleNumber; 
     } 

    } 
} 

En la clase de vehículo caso anterior está disponible para VehicleService y no lo están utilizando en otro sitio.

  1. Proporcionar implementación predeterminada de una interfaz podemos definir una clase dentro de una interfaz

interfaz

package PracticeTest; 

public interface VehicleService { 
public void repair(); 
public class DefaultVehicle implements VehicleService{ 

    @Override 
    public void repair() {   
     System.out.println(" Default Repair"); 
    } 
} 

Clase de implementación

package PracticeTest; 
public class busRepair implements VehicleService{ 

    @Override 
    public void repair() { 
     System.out.println(" Bus Repair"); 
    } 
    public static void main(String args[]){ 
     busRepair b = new busRepair(); 
     b.repair(); 
     DefaultVehicle d = new DefaultVehicle(); 
     d.repair(); 
    } 
} 
Cuestiones relacionadas