En Java, se utiliza la interfaz de ocultar las implementaciones de los usuarios. Interfaz contiene sólo métodos abstractos y métodos abstractos que no tienen un cuerpo que no puede crear un objeto sin constructor. Algo como esto
public interface ExampleInterface {
}
public class Example implements ExampleInterface {
private static void main(String[] args) {
// This is not possible
ExampleInterface objI = new ExampleInterface();
// However this is
ExampleInterface[] arrI = new ExampleInterface[10];
}
}
Mi pregunta es por qué Java permite crear una gran variedad de objetos de interfaz y en la que alguien podría utilizarlo? Está es una buena práctica de codificación para usarlo o es mejor crear una clase concreta que implemente la interfaz y luego crear una matriz de esa clase.
Tenga en cuenta que la creación de una serie de interfaces no es la misma que la creación de un ejemplo de una interfaz. Por lo que permite crear matrices de las interfaces, lo que no implica que también se puede crear instancias de interfaces de ahora.
Vamos a darle ExampleInterface
un método para el bien de la discusión:
public interface ExampleInterface {
void foo();
}
Al hacer esto:
ExampleInterface[] arrI = new ExampleInterface[10];
Usted se acaba de crear una matriz de elementos diez que tiene este aspecto:
{ null, null, null, null, null, null, null, null, null, null }
¿Por qué null
? Debido a que es el valor por defecto para cualquier tipo de referencia.
Como se puede ver, no hay ningún caso de ExampleInterface
mágicamente creados mediante el uso de esa línea anterior. Para reemplazar esos null
s, usted todavía tiene que utilizar una clase que implementa ExampleInterface
u obtener una instancia de otro lugar:
arrI[0] = new ExampleInterfaceImplementer();
// arrI[0] = new ExampleInterface(); // this still doesn't work
Al final del día, todavía no sabemos lo que la aplicación de la foo
apariencia como por arrI[0]
o arrI[1]
, o array[2]
, y así sucesivamente, de modo que nada se rompe.
¿Es una buena práctica de codificación para usarlo o es mejor crear una clase concreta que implemente la interfaz y luego crear una matriz de esa clase?
Bueno, no es una mala práctica. A veces, no siempre se puede hacer esto último. ¿Qué pasa si desea almacenar instancias de ambos A
y B
que el implemento ExampleInterface
?
Relacionado: ¿Qué significa que "el programa a una interfaz"?