Se puede crear una instancia de una interfaz al pasar de una interfaz en Java?

MattGotJava:

Por ejemplo, si tengo una interfaz:

interface Executable {
    void execute();
}

No sería capaz de crear una instancia explícitamente. Si se trató de crear una nueva instancia de la interfaz ejecutable, se obtendría un error de compilación, diciendo 'no puede crear una instancia del tipo Ejecutable'.

Sin embargo, cuando se trata de pasar de una interfaz a un método, me di cuenta de que se podía hacer esto:

class Runner {
    public void run(Executable e) {
        System.out.println("Executing block of code...");
        e.execute();
    }
}

public class App {
    public static void main(String[] args) {
        Runner r = new Runner();

        // When passing the Executable type, am I instantiating it?
        r.run(new Executable() {
            public void execute() {
                System.out.println("Executed!");
            }
        });

    }
}

¿Cómo es esto posible? ¿No se crea una nueva instancia de interfaz Executablea causa de la newpalabra clave? ¿Hay algo que no entiendo? Una explicación breve y algunos ejemplos son muy apreciadas!

Nikolas:

Una interfaz es una clase que proporciona una plantilla de métodos necesita ser implementado. No se puede crear una instancia de una interfaz que se debe a que no haría nada sin sus métodos implementaciones.

Si se instancia un objeto que implementa una interfaz, las implementaciones de los métodos se proporcionan y funciona prácticamente igual que se ejemplariza una interfaz con la aplicación del mismo método. En su caso, se llama una clase anónima que acaba proporciona la necesaria aplicación de los métodos a utilizar. Tener una interfaz:

interface Executable {
    void execute();
}

Instanciación es:

Executable executable = new Executable() {
    @Override
    public void execute() {
        System.out.println("Executed!");
    }
}

Aquí se proporciona el método de execute()una implementación. Desde la interfaz sólo tiene un método y actúa como una interfaz funcional, puede simplificar con una expresión lambda desde Java 8:

Executable executable = () ->  System.out.println("Executed!");

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=204983&siteId=1
Recomendado
Clasificación