Si mi clase es implements
una interfaz, ¿puedo decir que estoy siguiendo la herencia? Sé que cuando una clase es extends
otra clase, entonces es herencia.
java
terminology
interfaces
inheritance
definition
RajeeV VenkaT
fuente
fuente
Respuestas:
ACTUALIZACIÓN: He revisado esta respuesta. Se plantearon una serie de buenos puntos en los comentarios que merecían ser llamados.
No está del todo claro qué quieres decir con "seguir la herencia". Hagamos una pregunta un poco diferente?
Estos son sutilmente diferentes. Eso es lamentable porque es confuso.
La confusión puede surgir porque las personas piensan en la herencia como un mecanismo para compartir detalles de implementación. Aunque es un mecanismo de este tipo, ese mecanismo funciona compartiendo miembros . ¡Esos miembros no necesitan tener implementaciones! Como veremos, pueden ser abstractos.
Personalmente, estaría más feliz si las especificaciones Java y C # usaran una palabra diferente a "hereda" para describir la relación entre los métodos de interfaz y las clases, para evitar esta confusión. Pero no lo hacen, y tenemos que razonar a partir de las especificaciones, no en contra de ellas.
Si, algunos lo son. Consulte la sección 8.4.8 de la especificación de Java, que cito aquí para su conveniencia.
Si dice que una clase implementa una interfaz, la clase hereda los métodos abstractos y predeterminados de esa interfaz . (Por supuesto, he omitido las condiciones que siguen; vea la especificación para más detalles. En particular, una clase que implementa un miembro de una interfaz no se considera que haya heredado ese miembro. Nuevamente, ¿es esto confuso? Sí).
Por lo general, diríamos que una clase implementa una interfaz. Como se señaló anteriormente, una clase puede heredar miembros de una interfaz, y aún así no se puede decir que herede de la interfaz. Lo cual es confuso, sí.
Por lo general no. Este tipo de análisis estrecho de la especificación es más útil para los escritores de compiladores que los desarrolladores de línea de negocios. Es más importante entender cuándo usar una interfaz que obtener una definición precisa de "hereda de".
fuente
java
así que esta es la respuesta correcta, a menos que el OP se refiera a otrajava
:-)Herencia significa escribir una nueva subclase para una superclase. Escribir una nueva clase en una interfaz es implementar esa interfaz. (Y escribir una nueva interfaz basada en una antigua está extendiendo esa interfaz).
El único término correcto que se aplica a las tres posibilidades es el subtipo . No todos los subtipos son subclases.
fuente
Con subclases , tú
Con las interfaces , completa un contrato implementando los métodos declarados.
Esa es la forma clásica de verlo. Ahora con Java 8 las interfaces se convierten en una mezcla:
¿Implementar una interfaz cuyos métodos tienen implementaciones predeterminadas todavía cuenta como 'implementar', o más bien como extensión? No pude decirlo. Como este caso es bastante exagerado (esto en realidad habilitó la herencia múltiple sin estado), todavía usaría 'herencia' solo con subclases.
fuente