No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Curso de Java SE Orientado a Objetos

Curso de Java SE Orientado a Objetos

Anahí Salgado Díaz de la Vega

Anahí Salgado Díaz de la Vega

Diferencias entre las Interfaces y las Clases Abstractas

29/38
Recursos

Aportes 51

Preguntas 3

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Clase Abstracta: No se instancian, solo se heredan. Cierto? 😃

“Forma en como nombramos:
Clase abstracta: pensamos en objetos
Interfaz: pensamos en acciones que pueden tener muchos objetos”

Aquí unas guías de complemento y su uso:
Clase Abstracta: https://n9.cl/aju1
Interfaces: https://n9.cl/h5lh

Me causa un poco de conflicto y siento que lo hará en el examen, el hecho de que diga que no se puede heredar de una clase abstracta y luego diga que hay un pequeño hack para hacer una instancia

No me quedó claro la última parte de que una aplicación debe estar orientada a interfaces. Acaso estas no deben ser “implementadas” por las clases?
O indica que las aplicaciones deben estar orientadas a interfaces por sobre clases abstractas?

Interfaces a partir de Java 8

Antes de Java 8 las interfaces sólo podían tener métodos abstractos, es decir sin implementación.
Con Java 8 las interfaces pueden tener métodos default y static. La razón de este cambio es para que los desarrolladores puedan añadir nuevos métodos a las interfaces sin afectar las clases que implementan estas interfaces.
Los métodos default y static sí tienen un cuerpo o implementación en su interfaz.

¿Pór qué el método defautl?

Suponiendo que cientos de clases implementan una interfaz, si se le agrega un nuevo método, antes de Java 8 se tendría que implementar ese nuevo método en cada una de las clases que implementan la interfaz.

Gracias a Java 8, ya no es necesario que el default method sea implementado, sino que es opcional. De manera que se puedan añadir nuevos métodos a la interfaz sin romper el código.

¿Y el static method?

Un método estático en una interfaz es similar al default method excepto que no es posible sobrescribir este método en las clases que implementan la interfaz.

Diferencia entre una clase abstracta y una interfaz

El propósito de una interfaz es proporcionar una abstracción total, mientras que una clase abstracta propociona una abstracción parcial.

Una clase abstracta únicamente se utilizará para definir subclases, sólo se podrá heredar. Por lo tanto la herencia de métodos se llevará de forma lineal, desde una clase padre a una clase hijo y así sucesivamente.

Una clase abstracta sólo servirá para redefinir nuevas clases sin crear nuevos objetos.

Los métodos de una interfaz pueden implementarse en muchas familias de clases, la implementación de los métodos dejará de ser lineal como se hace en las clases abstractas.

La clases abstractas están más enfocadas en un objeto, y las interfaces son más enfocadas en las acciones en común de muchos objetos.

Buenas prácticas

  • El diseño de las aplicaciones debe ser orientado a las interfaces y no a la implementación.
  • Concentrarse en crear buenas abstracciones.
  • Comportamiento en común.
  • Enfocarse en la declaración de los métodos.
  • Crear módulos homogéneos e independientes para posibilitar la escalabilidad y eficiencia.

Fuente

https://beginnersbook.com/2017/10/java-8-interface-changes-default-method-and-static-method/

Clase Abstracta

¿Cuando puedo utilizar una clase abstracta?

únicamente se utilizará para definir subClases, por lo tanto siempre deberá ser heredada para poder heredar y sobreescribir los métodos de su clase padre.

Una restricción de esta clase es que, naturalmente, no se podrá crear instancias a partir de ella. Únicamente podrá ser heredada. Por lo tanto la herencia de métodos se llevará de forma lineal, desde una clase padre a una clase hija y así sucesivamente.

Herencia de métodos en clases abstractas de forma Lineal

Podemos heredar métodos abstractos y no abstractos.

Por lo tanto una Clase abstracta nos servirá para redefinir nuevas Clases sin crear nuevos Objetos.

Interfaz

¿Cuando puedo utilizar una Interfaz?

En una interfaz tenemos nuevos modificadores de Acceso Default y Private, esto significa que podemos agregar comportamiento a los métodos de una interfaz. Entonces una interfaz, ahora, tendra métodos con implementación y otros sin implementación, igual que en una clase abstracta.

En la interfaces tendremos una estructura similar de métodos abstractos y no abstractos. Pero acá la vista principal será sobre los métodos que estos pueden implementarse en muchas familias de Clases. La implementación de estos métodos dejará de ser Lineal, como en la clases abstractas.

La implementación de métodos de interfaces no es Lineal

¿Cuando implementar cada una?

Usaremos interfaces para implementar métodos que se comparten entre familias, es decir, la relación va más allá de la herencia entre dos clases.

Otra diferencia es la forma en como nombramos una clase abstracta y una interfaz. En la Abstracta pensaremos mas en objetos y en la interfaces pensaremos más en las acciones, comportamientos, que pueden tener en común muchos objetos.

Es común encontrar nombres en forma de acciones como Drawable (Dibujable), Runnable (Ejecutable), Callable (invocable), Visualizable (Visualizable) para interfaces. Y para clases abstractas tendremos nombres sustantivos como Film, Publication, Figure.

Buenas prácticas

Una buena práctica es que el diseño de las aplicaciones, siempre, esté orientado a interfaces y no a la implementación.

Crear buenas abstracciones para encontrar comportamientos en común.

Enfocarse en la declaración de métodos.

Si se trata de forma homogenea y con independencia los módulos, el programa será más eficiente y escalables

Las Clases Abstractas sirven para definir SubClases, la implementación de los métodos de las Clase Abstractas es opcional, para utilizar sus métodos debe ser heredada por una SubClase y la herencia de métodos es lineal.
Las Interfaces cuentan modificadores de acceso para métodos(default, private) lo que permite que la implementación de un método sea opcional como las clases Abstractas, los métodos de la Interface pueden implementaarse en diferentes familias, es decir, la relación va mas allá de la relación entre dos clases y la herencia de métodos deja de ser lineal.

Porfa quiten la musica de fondo, o bajenle, distrae.

No se ustedes pero me gusto mas esta manera de dar el curso



Porque las interfaces tienen en común que usualmente se les encuentra con la palabra “-able” al final? Según entiendo cualquier metodo como “Run” podria ser implementado en otras clases.

Bueno de esta forma es como me quedo claro a mi:
En resumen, una clase abstracta se utiliza como una clase base para ser extendida, mientras que una interfaz se utiliza para definir un contrato que debe ser seguido por las clases que la implementan.

Muy bonito y todo la clase así, pero es más difícil tomar anotaciones así, e igual comprenderlo.

Diferencias entre las interfaces y las clases abstractas

Las interfaces tiene modificadores de acceso (default y private), esto significa que es posible añadir comportamiento a métodos de una interfaz. Entonces una interfaz ahora tendrá métodos con implementación y otros sin ella, igual que una clase abstracta.

Una clase abstracta solo se utilizará para definir subclases, es decir, esta siempre debe ser heredada para poder reutilizar y sobrescribir sus métodos. De estas no se puede crear instancias, por lo que la herencia de métodos se hará de forma lineal.
Una clase abstracta sólo servirá para redefinir nuevas clases sin la necesidad de crear nuevos objetos.


Las interfaces tiene métodos que pueden implementarse en diferentes familias de clases, la implementación de los métodos dejará de ser lineal.

Las interfaces se utilizan cuando se tienen métodos que se pueden implementar en muchas familias, es decir, la relación va mas allá de la relación entre dos clases.


Otra diferencia está en cómo se nombran. Para la Clase Abstracta pensaremos más en objetos y en las interfaces en las acciones que pueden tener en común muchos objetos.

Una buena práctica es que el diseño de las aplicaciones siempre esté orientado a interfaces y no a la implementación, para esto:

  • Crea buenas abstracciones
  • Intenta encontrar el comportamiento común
  • Enfócate en la declaración de métodos.

😀 Esta sección nos permite determinar las diferencias que existen entre una clase abstracta y una interfaz.

Super!!

Excelente explicación, muy bien diseñada la animación para explicar es genial

cuando usar clases abstractas y interfaces. Primero debemos comprender cuales son las diferencias entre ellos y sus características para esto debemos comprender muy pero muy bien su concepto general Primero tenemos las clases abstracta estas nos dicen que servirán de models para la creación de otras clases debido a que estas solo tiene la firma y no el cuerpo y en las subclases poder darles este, no se pueden crear instancias y metodos y no podemos crear objeto En las interfaces tenemos que estas cuentas con modificadores y son capaces de usar la heredaron estas solo cuentan con comportamientos que.podemis moldear de forma distinta en cada subclase como elegir cual usar en los objetos separemos mas en objetos y en las interfaces mas como las acciones pueden ser comunes con otros objetos

Here are some of the reasons why this hack is not recommended:

  • It makes the code more difficult to understand.
  • It makes the code more difficult to maintain.
  • It is possible that the hack will not work in future versions of Java.

Algunas diferencias entre las interfaces y las clases abstractas son:

  • Una clase solo puede extender una sola clase abstracta, pero puede implementar varias interfaces.

  • Una clase abstracta puede tener métodos no abstractos, mientras que una interfaz solo puede tener métodos abstractos.

  • Una clase abstracta puede tener atributos, mientras que una interfaz no.

  • Una clase abstracta puede proporcionar una implementación por defecto para un método, mientras que una interfaz no.

Las clases abstracta serán mas utilizadas para crear clases padres y las interfaces para poder reutilizar métodos que nos ayuden en muchos objetos

La Diapositiva no esta a la par de lo que anahí va hablando, lo que me confundió mucho.

Alguien que le quite la musica desesperante de fondo por favor

Clase abstracta = pensar más en los objetos
Interfaces = pensar más en las acciones comunes (métodos) de varios objetos

  • Interfaces
    Nuevo Modificador de Acceso

Private

Default

Se utiliza para implementar métodos abstractos

Los métodos pueden implementarse en muchas familias de clases

La implementación de métodos dejara de ser lineal.

Se enfoca el los métodos y es común encontrar nombres como runnable, visualizable,

  • Clases abstractas

Se utiliza para definir clases hijas

No podre instanciarla, únicamente heredarla

La herencia se métodos seguirá de manera lineal

No podemos crear métodos

Se enfoca mas en las subclases

  • Abstraccion

Concentrarse en interfases

Comportamiento común

Declaración de métodos

Por favor quiten esa música horrible del video o suban el volumen de la voz para poder centrarnos en lo importante.
Gracias

Clases abstractas -> Objetos
Instancias -> Comportamientos

excelente 😃 hacia falta otra aclaración XD

si, bastante mas claro asi

Genial.

Muy buena la explicación, Gracias!

excelente explicacion, me gusto mucho la animacion, cual la herramienta para hacer estar animaciones?

Estupenda manera de abordar la diferencia entre las clases abstractas y las interfaces, la principal diferencia es que las primeras se enfocan en ayudar a la creación de subclases por medio de la herencia para hacer la aplicación más eficiente. Por el otro lado las interfaces, se centran en el compartimiento que se les pueda brindar a las clases.

Genial ,quedo más claro la diferencia entre las interfaces y las clases abstractas.

Alguien me podria dar un ejemplo de cuando nos beneficiaria usar herencia de una clase QUE NO SEA Abstracta?

Excelente

Mucho mas claro

¡Muy buena explicación!

Clase abstractas
Únicamente se utilizará para definir subclases, esta siempre deberá ser heredada para poder utilizar y sobrescribir los métodos. Una restricción que tiene esta clase, es que naturalmente no se puede crear instancias ni objetos a partir de ella únicamente solo se podrá heredarla. La herencia de métodos se llevará de forma lineal de una clase padrea a una clase hijo. Solo Servirá para redefinir nuevas clases sin necesidad de crear nuevos objetos.

Interfaces
Tenemos una estructura similar de métodos abstractos y no abstractos. Pero aquí la vista principal será los métodos que estos podrán implementar en muchas familias de clases. La implementación de los métodos dejará de ser lineal.

Usaremos interfaces para implementar métodos que se comparten entre familias. La relación va más allá de la herencia entre dos clases. La forma en que nombramos una clase abstracta y una interfaces. Abstractas pensaremos más en objetos y en las interfaces pensaremos más en las acciones en que puede tener en común muchos objetos.

Buenas gente!

Aquí les dejo un link a un post que me permitió ir un poco mas allá sobre aquello de la “composición por sobre la herencia”

Click aqui para ir al post

Dejo advertido que no es mía la pagina ni nada, pero la manera en la que explican todo es bastante clara.

Un saludo a tod@s.




ya un poco mas claro ahora

Java es muy amplio no es suficiente con las bases de clases y objetos, el tema de las interfaces es mas profundo, aumentando la complejidad.

Mis apuntes de esta Clase:

Diferencias entre las Interfaces y las Clases Abstractas

Las interfaces ahora cuentan con nuevos modificadores de acceso: default y private lo que significa que ahora se puede agregar comportamiento a los métodos de una interfaz, por lo que una interfaz tendrá métodos con implementación y otros sin implementación, exactamente igual que en una Clase abstracta.

Diferencias

  • Clases abstractas

    Se usan para definir subclases, por lo que siempre debe ser heredada para poder llamar y sobrescribir los métodos. La herencia de métodos se hace de forma lineal; se pueden heredar métodos abstractos y no abstractos. En resumen una Clase abstracta sirve para redefinir nuevas Clases sin tener que crear nuevos objetos. Las Clases abstractas a diferencia de las interfaces se centran más en los objetos

  • Interfaces

    Se tienen métodos abstractos y no abstractos, dichos métodos pueden implementarse en familias de Clases distintas por lo que aquí la implementación de los métodos no es lineal. En resumen las interfaces se usan cuando se quiere crear métodos que se puedan implementar en muchas familias, considerando las acciones que pueden tener en común muchos objetos.

    Nota: una buena práctica es que el diseño de las apps siempre este orientado a interfaces y no a la implementación. Hay que concentrase en crear buenas abstracciones, encontrar comportamientos comunes, tratar de forma independiente los módulos.

En la abstracta pensaremos mas en objetos (no podemos crear objetos) xd ? y en las interfaces en las acciones que pueden tener muchos objetos…

¿a que refiere que el diseño de una aplicación este orientado a interfaces y no a la implementación?

Quedo claro.