Diferencia entre clase abstracta e interfaz en Java
Diferencia clave entre clase abstracta e interfaz en Java
- En Interface, una clase puede implementar mรบltiples interfaces, mientras que la clase puede heredar solo una clase abstracta.
- En Interfaz no tiene modificadores de acceso. Se supone que todo lo definido dentro de la Interfaz tiene un modificador pรบblico, mientras que la Clase Abstracta puede tener un modificador de acceso.
- La interfaz no puede contener campos de datos, mientras que la clase abstracta puede tener campos de datos.
- Las interfaces ayudan a definir las habilidades perifรฉricas de una clase, mientras que una clase abstracta define la identidad de una clase.
ยฟQuรฉ es una clase abstracta?
Una clase que tiene la palabra clave abstract en su declaraciรณn se llama clase abstracta. Las clases abstractas deben tener cero o mรกs mรฉtodos abstractos, es decir, mรฉtodos sin cuerpo. Puede tener mรบltiples mรฉtodos concretos. Las clases abstractas le permiten crear planos para clases concretas. Pero la clase heredada debe implementar el mรฉtodo abstracto. Las clases abstractas no se pueden instanciar.
Razones importantes para utilizar interfaces
- Las interfaces se utilizan para lograr abstracciรณn.
- Diseรฑado para admitir la resoluciรณn de mรฉtodos dinรกmicos en tiempo de ejecuciรณn
- Le ayuda a lograr un acoplamiento flojo.
- Le permite separar la definiciรณn de un mรฉtodo de la jerarquรญa de herencia.
Razones importantes para utilizar la clase abstracta
- Las clases abstractas ofrecen funcionalidad predeterminada para las subclases.
- Proporciona una plantilla para futuras clases especรญficas.
- Le ayuda a definir una interfaz comรบn para sus subclases.
- La clase abstracta permite la reutilizaciรณn del cรณdigo.
ยฟQuรฉ es una interfaz?
La interfaz es un modelo que se puede utilizar para implementar una clase. La interfaz no contiene ningรบn mรฉtodo concreto (mรฉtodos que tienen cรณdigo). Todos los mรฉtodos de una interfaz son mรฉtodos abstractos. No se puede crear una instancia de una interfaz. Sin embargo, sรญ se pueden crear instancias de clases que implementan interfaces. Las interfaces nunca contienen variables de instancia, pero pueden contener variables finales pรบblicas estรกticas (es decir, variables de clase constantes).
Diferencia entre interfaz y clase abstracta en Java
Una clase abstracta le permite crear funciones que las subclases pueden implementar o anular, mientras que una interfaz solo le permite indicar la funcionalidad pero no implementarla. Una clase puede extender solo una clase abstracta, mientras que una clase puede implementar mรบltiples interfaces.
| Parรกmetros | Fรกcil de usar | Clase abstracta |
|---|---|---|
| Speed (Rapidez) | Lenta | Rรกpido |
| Herencias Mรบltiples | Implementar varias interfaces | Sรณlo una clase abstracta |
| Estructura | Mรฉtodos abstractos | Mรฉtodos abstractos y concretos. |
| Cuรกndo usarlos | Mejora futura | Para evitar la independencia |
| Herencia/Implementaciรณn | Una clase puede implementar mรบltiples interfaces | La clase puede heredar solo una clase abstracta. |
| Implementaciรณn predeterminada | Al agregar cosas nuevas a la interfaz, es una pesadilla encontrar todos los implementadores e implementar cosas reciรฉn definidas. | En el caso de la clase abstracta, puede aprovechar la implementaciรณn predeterminada. |
| Modificadores de acceso | La interfaz no tiene modificadores de acceso. Todo lo definido dentro de la interfaz se supone un modificador pรบblico. | La clase abstracta puede tener un modificador de acceso. |
| Cuรกndo usarlos | Es mejor utilizar la interfaz cuando varias implementaciones comparten รบnicamente la firma del mรฉtodo. Jerarquรญa polimรณrfica de tipos de valores. | Debe usarse cuando varias implementaciones del mismo tipo comparten un comportamiento comรบn. |
| Campos de informaciรณn | la interfaz no puede contener campos de datos. | la clase puede tener campos de datos. |
| Valor predeterminado de herencia mรบltiple | Una clase puede implementar numerosas interfaces. | Una clase hereda sรณlo una clase abstracta. |
| Implementaciรณn | Una interfaz es abstracta por lo que no puede proporcionar ningรบn cรณdigo. | Una clase abstracta puede proporcionar un cรณdigo predeterminado completo que debe anularse. |
| Uso de modificadores de acceso | No puede utilizar modificadores de acceso para el mรฉtodo, propiedades, etc. | Puede utilizar una clase abstracta que contenga modificadores de acceso. |
| Uso | Las interfaces ayudan a definir las habilidades perifรฉricas de una clase. | Una clase abstracta define la identidad de una clase. |
| Campos definidos | No se pueden definir campos | Una clase abstracta le permite definir campos y constantes. |
| Herencia | Una interfaz puede heredar varias interfaces pero no puede heredar una clase. | Una clase abstracta puede heredar una clase y mรบltiples interfaces. |
| Constructor o destructores | Una interfaz no puede declarar constructores ni destructores. | Una clase abstracta puede declarar constructores y destructores. |
| Lรญmite de extensiones | Puede ampliar cualquier nรบmero de interfaces. | Sรณlo puede extender una clase o una clase abstracta a la vez. |
| Palabra clave abstracta | En una palabra clave de interfaz abstracta, es opcional para declarar un mรฉtodo como abstracto. | En una clase abstracta, la palabra clave abstract es obligatoria para declarar un mรฉtodo como abstracto. |
| Tipo de clase | Una interfaz sรณlo puede tener mรฉtodos abstractos pรบblicos. | Una clase abstracta tiene mรฉtodos abstractos pรบblicos y protegidos. |
Cรณdigo de muestra para interfaz y clase abstracta en Java
A continuaciรณn se muestra un cรณdigo de muestra para crear una interfaz y una clase abstracta en Java
Sintaxis de la interfaz
interface name{
//methods
}
Java Ejemplo de interfaz:
interface Pet {
public void test();
}
class Dog implements Pet {
public void test() {
System.out.println("Interface Method Implemented");
}
public static void main(String args[]) {
Pet p = new Dog();
p.test();
}
}
Sintaxis de clase abstracta
abstract class name{
// code
}
Ejemplo de clase abstracta:
abstract class Shape {
int b = 20;
abstract public void calculateArea();
}
public class Rectangle extends Shape {
public static void main(String args[]) {
Rectangle obj = new Rectangle();
obj.b = 200;
obj.calculateArea();
}
public void calculateArea() {
System.out.println("Area is " + (b * b));
}
}

