¿Puede una interfaz extender múltiples interfaces en Java? Este código parece válido en mi IDE y compila:
interface Foo extends Runnable, Set, Comparator<String> { }
pero había escuchado que la herencia múltiple no estaba permitida en Java. ¿Por qué parece haber una excepción para las interfaces?
java
inheritance
multiple-inheritance
extends
Prateek
fuente
fuente
Respuestas:
Si, puedes hacerlo. Una interfaz puede extender múltiples interfaces, como se muestra aquí:
Una sola clase también puede implementar múltiples interfaces. ¿Qué sucede si dos interfaces tienen un método que define el mismo nombre y firma?
Hay un punto complicado:
Entonces la implementación única funciona para ambos :).
Lee mi publicación completa aquí:
http://codeinventions.blogspot.com/2014/07/can-interface-extend-multiple.html
fuente
void test()
y la interfaz B conboolean test()
? (¿Es un primo del problema del diamante ?) __ Lo probé y sucede lo sensato: no está permitido si el tipo de devolución es diferente.Una interfaz puede extender múltiples interfaces .
Una clase puede implementar múltiples interfaces .
Sin embargo, una clase solo puede extender una sola clase .
Tenga cuidado de cómo usa las palabras
extends
yimplements
cuando habla deinterface
yclass
.fuente
La respuesta es sí.
De acuerdo con JLS
fuente
Desde la página de documentación de Oracle sobre el tipo de herencia múltiple, podemos encontrar la respuesta precisa aquí . Aquí deberíamos conocer primero el tipo de herencia múltiple en Java:
Java "no admite la herencia múltiple de estado, pero admite la herencia múltiple de implementación con métodos predeterminados desde el lanzamiento de Java 8 y la herencia múltiple de tipo con interfaces.
Entonces aquí surge la pregunta para el "problema del diamante" y cómo Java lidia con eso:
En caso de herencia múltiple de implementación, el compilador de Java da un error de compilación y le pide al usuario que lo arregle especificando el nombre de la interfaz. Ejemplo aquí: -
Así que aquí obtendremos un error como: - la interfaz D hereda los valores predeterminados no relacionados para el método () de los tipos B y C, la interfaz D se extiende B, C
Puedes arreglarlo como: -
En conclusión, podemos decir que Java no admite la herencia múltiple de estado, pero sí admite la herencia múltiple de implementación y la herencia múltiple de tipo .
fuente
Puede extender múltiples
Interfaces
pero no puede extender múltiplesclasses
.La razón por la que no es posible en Java extender múltiples clases, es la mala experiencia de C ++ donde esto es posible.
La alternativa para la herencia multipe es que una clase puede implementar múltiples interfaces (o una interfaz puede extender múltiples interfaces)
fuente
Creo que su confusión radica en la herencia múltiple, en la que es una mala práctica hacerlo y en Java esto tampoco es posible. Sin embargo, la implementación de múltiples interfaces está permitida en Java y también es segura.
fuente
por ejemplo, eche un vistazo aquí: http://www.tutorialspoint.com/java/java_interfaces.htm
fuente