una que interfaz interfaces implementacion herencia ejemplos ejemplo clases clase abstractas abstracta java interface

que - public interface java



Confusión en el método de interfaz Java de llamada (5)

Depende del tipo de tiempo de ejecución del objeto. Ver:

Esta es tu interfaz:

public interface A { public void a(); }

Y esta es tu clase:

public class AImpl implements A { public void a() { println("I am AImpl"); } }

Hay otra implementación:

public class AnotherAImpl implements A { public void a() { println("I am another AImpl"); } }

Así que eche un vistazo a este método principal:

public static void main(String[] args){ A aa; aa = new AImpl(); aa.a(); // prints I am AImpl aa = new AnotherAImpl(); aa.a(); // now it prints I am another AImpl }

Digamos que tengo una interfaz A, definida de la siguiente manera:

public interface A { public void a(); }

Incluye el método llamado void a();

Tengo una clase que implementa esta interfaz y tiene un solo método:

public class AImpl implements A { @Override public void a() { System.out.println("Do something"); } }

P: Si en la clase principal, llamo al método de interfaz, ¿llamará a la implementación que pertenece a la clase que implementa la interfaz?

Por ejemplo:

public static void main(String[] args){ A aa; aa.a(); }

¿Se imprimirá "Haz algo"?


Necesita invocar la rutina en el objeto AImpl real

A aa = new AImpl(); aa.a();

que aquí es equivalente a seguir

AImpl aa = new AImpl(); aa.a();

Su muestra generará un error ya que está intentando invocar un método en un objeto sin inicializar.


No lo haré.

Has declarado una variable. Debe inicializarlo primero con la instancia de un objeto en este caso su clase AImpl .

public static void main(String[] args){ A aa = new AImp(); aa.a(); }


Probablemente podría descubrirlo ejecutando el código usted mismo.

Actualmente obtendrá una NullPointerException porque no ha asignado nada a la variable aa . Cambiar su código a lo siguiente invocará el método y generará el texto:

public static void main(String[] args){ A aa = new AImpl(); aa.a(); }


A aa = new AImpl(); aa.a();

Aquí su variable de referencia es la interfaz tipo A pero el Object real es AImpl .

Cuando define una nueva interfaz, está definiendo un nuevo tipo de datos de referencia. Puede usar nombres de interfaz en cualquier lugar que pueda usar cualquier otro nombre de tipo de datos. Si define una variable de referencia cuyo tipo es una interfaz, cualquier objeto que le asigne debe ser una instancia de una clase que implemente la interfaz.

Leer más en Documentation

Una referencia de interfaz puede contener el objeto de AImpl mientras implementa la interfaz A.