Interfaz (Java)


Una interfaz en el lenguaje de programación Java es un tipo abstracto que se usa para especificar un comportamiento que las clases deben implementar. Son similares a los protocolos . Las interfaces se declaran utilizando la interface palabra clave y solo pueden contener firmas de métodos y declaraciones constantes (declaraciones de variables que se declaran como ambas staticy final). Todos los métodos de una interfaz no contienen aplicación (código de método) como de todas las versiones de Java debajo de 8. A partir de Java 8, defaulty staticlos métodos pueden tener aplicación en la interfacedefinición. [1] Luego, en Java 9 privateyprivate staticSe agregaron métodos. En la actualidad, una interfaz Java puede tener hasta seis tipos diferentes.

Las interfaces no se pueden instanciar , sino que se implementan. Una clase que implementa una interfaz debe implementar todos los métodos no predeterminados descritos en la interfaz o ser una clase abstracta . Las referencias a objetos en Java se pueden especificar para que sean de un tipo de interfaz; en cada caso, deben ser nulos o estar vinculados a un objeto que implemente la interfaz.

Una ventaja de utilizar interfaces es que simulan herencia múltiple . Todas las clases en Java deben tener exactamente una clase base , siendo la única excepción java.lang.Object(la clase raíz del sistema de tipos Java ); no se permite la herencia múltiple de clases. Sin embargo, una interfaz puede heredar múltiples interfaces y una clase puede implementar múltiples interfaces.

Las interfaces se utilizan para codificar similitudes que comparten las clases de varios tipos, pero no constituyen necesariamente una relación de clase. Por ejemplo, un humano y un loro pueden silbar ; sin embargo, no tendría sentido representar Humansy Parrots como subclases de una Whistlerclase. Más bien, lo más probable es que sean subclases de una Animalclase (probablemente con clases intermedias), pero ambas implementarían la Whistlerinterfaz.

Otro uso de las interfaces es poder utilizar un objeto sin conocer su tipo de clase, sino solo que implementa una determinada interfaz. Por ejemplo, si a uno le molesta un silbido, es posible que no sepa si es un humano o un loro, porque todo lo que podría determinarse es que un silbido está silbando. La llamada whistler.whistle()llamará al método whistlede objeto implementado whistlersin importar qué clase tenga, siempre que implemente Whistler. En un ejemplo más práctico, un algoritmo de clasificación puede esperar un objeto de tipo Comparable. Por lo tanto, sin conocer el tipo específico, sabe que los objetos de ese tipo se pueden clasificar de alguna manera.

El cuerpo de la interfaz contiene métodos abstractos , pero como todos los métodos de una interfaz son, por definición, abstractos, la abstractpalabra clave no es necesaria. Dado que la interfaz especifica un conjunto de comportamientos expuestos, todos los métodos lo son implícitamente public.