2010-10-16 15 views
9
interface Int { 
    public void show(); 
} 

public class Test {  
    public static void main(String[] args) { 
     Int t1 = new Int() { 
      public void show() { 
       System.out.println("message"); 
      } 
     }; 

     t1.show(); 
    } 
} 

Respuesta

16

Está definiendo una clase anónima que implementa la interfaz Int, e inmediatamente crea un objeto del tipo thatAnonymousClassYouJustMade.

+2

Esto es realmente útil para controladores de eventos (como los que usan la interfaz ActionListener). –

4

Lo que hace esta sintaxis especial para las clases internas anónimas bajo el capó es crear una clase llamada Test$1. Puede encontrar ese archivo de clase en la carpeta de su clase junto a la clase Prueba, y si imprimió t1.getClass().getName() también podría ver eso.

7

Esta notación es la abreviatura de

Int t1 = new MyIntClass(); 

// Plus this class declaration added to class Test 
private static class MyIntClass implements Int 
    public void show() { 
     System.out.println("message"); 
    } 
} 

Así que al final va a crear una instancia de una clase concreta, cuyo comportamiento ha definido en línea.

Puede hacer esto también con clases abstractas, proporcionando implementaciones para todos los métodos abstractos en línea.

0

Creo que su objeto no tiene nada que ver con la interfaz. Si comenta la interfaz completa, igual obtendrá el mismo resultado. Es solo una clase anónima creada. Creo que, a menos que uses la clase "implementa", no puedes implementar la interfaz. Pero no sé cómo la colisión de nombres no ocurre en tu caso.

+0

La clase anónima definitivamente implementa la interfaz, y 't1 instanceof Int' será verdadera. – Thilo

Cuestiones relacionadas