Java - Interfaces en java

 
Vista:
sin imagen de perfil

Interfaces en java

Publicado por Trasto (2 intervenciones) el 25/09/2016 13:05:21
Buenas , ando aprendiendo java y ahora mismo tengo un lío grande con el tema de las interfaces.
Una interfac no se puede instanciar , pero entonces por que este código instancia una interfac Runnable?

1
2
3
4
5
6
7
8
9
10
public class AnonymousInnerClassTest {
  public static void main(String[] args) {
    new Thread(new Runnable() {
      @Override
      public void run() {
        System.out.println("A thread created and running ...");
      }
    }).start();
  }
}

Y por que no implementa la interfac runnable ? , tengo un lío grande con esto.

Saludos y gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Interfaces en java

Publicado por CienAños (1 intervención) el 25/09/2016 22:27:05
Saludos.
Las interfaces si se pueden instanciar.
Se puede crear una clase que implementa la interfaz java.lang.Runnable.
Una interfaz funcional ejecutable y se declara de la siguiente manera:

1
@FunctionalInterface public interface Runnable { void run(); }

A partir de Java 8, se puede utilizar una expresión lambda para crear una instancia de la interface Runnable.


1
2
3
4
// Lambda Runnable
Runnable tarea = () -> { System.out.println("Hola Java thread!");};
// iniciamos la tarea
new Thread(tarea).start();

Otro ejemplo sería:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
public class RunnableLambdaExample {
    public static void main(String[] args) {
        System.out.println(Thread.currentThread().getName() + ": RunnableTest");
 
        // Anonymous Runnable
 
        Runnable task1 = new Runnable(){
 
          @Override
          public void run(){
            System.out.println(Thread.currentThread().getName() + " is running");
          }
        };
 
 
        // Passing a Runnable when creating a new thread
        Thread thread2 = new Thread(new Runnable() {
            @Override
            public void run(){
                System.out.println(Thread.currentThread().getName() + " is running");
            }
        });
 
 
        // Lambda Runnable
        Runnable task3 = () -> {
            System.out.println(Thread.currentThread().getName() + " is running");
        };
 
        Thread thread1 = new Thread(task1);
 
        thread1.start();
        thread2.start();
 
        new Thread(task3).start();
 
    }
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil

Interfaces en java

Publicado por Trasto (2 intervenciones) el 25/09/2016 22:34:53
1
2
3
4
5
6
Thread thread2 = new Thread(new Runnable() {
    @Override
    public void run(){
        System.out.println(Thread.currentThread().getName() + " is running");
    }
});

Esto seria en java 7 , no es así? aun estoy muy verde con las clases y este concepto de clase anónima se me escapa.
Ya leí algo de las funciones lambda en java 8 pero aun no me quise meter con ellas.
Gracias por la respuesta :)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar