Abstract Clase vs. Interfaz en Java: explicación con ejemplos
Abstract clases e interfaces se utilizan para abstraction en Java. Abstraction en la programación orientada a objetos se refiere a ocultar los detalles de implementación a los usuarios finales.
In abstraction, puedes saber cuáles son las funcionalidades, pero no puedes saber cómo se implementaron.
Veamos cada uno de ellos y tratemos de entender por qué se usan.
Abstract Clase
Una clase que no puede ser instantánea.ated como un objeto y puede o no tener abstract Los métodos que contiene se denominan abstract clase en Java. Un abstract El método es un método que no tiene un cuerpo de implementación cuando se declara.

puedes crearate an abstract clase especificando el abstract
palabra clave antes de la class
palabra clave.
abstract class abstractClass {
void run() {
System.out.println("ran");
}
}
An abstract La clase puede ampliarse con otras clases. En otras palabras, también se puede subclasificar.
abstract class AbstractClass {
void run() {
System.out.println("ran");
}
}
class ExtendingAbstractClass extends AbstractClass {
void newMethod() {
System.out.println("new");
}
@Override
void run() {
System.out.println("override");
}
}
Abstract Las clases se utilizan para implementar métodos comunes entre múltiples clases que extienden un determinado abstract clase. Además, la capacidad de definir abstract métodos dentro abstract Las clases las hacen increíblemente útiles para clases que tienen métodos similares pero con implementaciones diferentes. Tomemos un ejemplo.
Considere un automóvil que tenga algunas funcionalidades, como arrancar, detener, reverse, etc. Estas funcionalidades son comunes entre todo tipo de coches.
Pero ¿qué pasa con las funcionalidades de automatización como self-¿conduciendo? La implementación de esas funcionalidades puede diferir para diferentes tipos de automóviles. Veamos cómo puedes crearate un programa orientado a objetos related a ello.
En primer lugar, create a Car
clase que se ampliará con múltiples clases de diferentes tipos de automóviles.
abstract class Car {
void start() {
// implementation
System.out.println("runs car");
}
void stop() {
// implementation
System.out.println("engine stops");
}
void reverse() {
// implementation
System.out.println("reverse mode enabled");
}
abstract void selfDrive();
}
El método start()
, stop()
y reverse()
Son métodos que son comunes en todos los coches. Entonces su implementación ya está definida dentro de la clase Car.self. Sin embargo, un determinado tipo de automóvil puede tener diferentes implementaciones de self-modo de conducción. Y así, puedes definir selfDrive()
como una abstract método e implementarlo de diferentes maneras en diferentes clases de diferentes tipos de automóviles.
class CarTypeA extends Car {
@Override
void start() {
super.start();
}
@Override
void stop() {
super.stop();
}
@Override
void reverse() {
super.reverse();
}
void selfDrive() {
// custom implementation
System.out.println("Type A self driving mode enabled");
}
}
class CarTypeB extends Car {
// ...all similar methods
void selfDrive() {
// custom implementation
// different implementation than CarTypeB
System.out.println("Type B self driving mode enabled");
}
}
Es importante tener en cuenta que, si una subclase no implementa todas abstract métodos definidos en el abstract clase, entonces debería declararse como una abstract clasificarloself.
Interfaz
Una interfaz es una forma de decirle a una clase qué métodos debe implementar. Por ejemplo, si considera el ejemplo de un automóvil, tiene algunas funciones básicas. Puede arrancar, moverse y detenerse. Estas funciones son comunes en todos los coches.
Entonces, si implementa una interfaz de un automóvil en una clase, debe implementar todos los métodos para que el automóvil funcione de manera adecuada y segura.
Similar a abstract clases, no podemos crear instanciasate o create objetos de una interfaz. Se puede considerar totalmente abstract clase porque contiene sólo abstract métodos, es decir, métodos sin un cuerpo de implementación.
puedes crearate una interfaz utilizando el interface
palabra clave.
interface CAR {
void start();
void stop();
void move();
}
Implementar una interfaz usando el implements
palabra clave al definir una clase.
class CarTypeB implements CAR {
public void start() {
System.out.println("started");
}
public void stop() {
System.out.println("stopped");
}
public void move() {
System.out.println("running");
}
}
Similitud
Ninguna instanciación como objeto es lo único que abstract las clases y las interfaces tienen en común.
Diferencias
Abstract Clase | Interfaz | |
Herencia e Implementación | Sólo uno abstract La clase puede ser heredada por una clase. | Una clase puede implementar múltiples interfaces. |
Tipos de variables | Puede tener variables finales, no finales, estáticas y no estáticas. | Solo puede tener variables estáticas y finales. |
Tipos de métodos | Puede contener ambos abstract así como no-abstract métodos. | Sólo puede contener abstract métodos, pero los métodos estáticos son una excepción. |
Modificadores de acceso | An abstract La clase puede tener un modificador de acceso. | Las firmas de métodos definidas en la interfaz son públicas de forma predeterminada. Una interfaz no tiene un modificador de acceso. |
Constructores y Destructores | Puede declarar constructores y destructores. | No puede declarar constructores o destructores. |
Velocidad | Rápido | Lenta |
Cuándo usarlos abstract clase e interfaz?
Uso abstract clases cuando:
- Desea compartir algunos métodos y campos comunes entre varias clases.
- Declarando
non-static
ynon-final
campos para modificar el state del objeto al que están vinculados.
Puede utilizar interfaces cuando:
- Desea definir el comportamiento de una clase que implementa la interfaz, pero no le importa la forma en que se implementa.
- Desea asegurarse de que una clase implemente todos los métodos para funcionar correctamente.
Palabras finales
Las interfaces se utilizan principalmente para crearate API porque pueden proporcionar una estructura para implementar la funcionalidad sin preocuparse por la implementación real.
Abstract las clases son genéricasally solía compartir común abstract y noabstract métodos entre múltiples clases, que extienden la abstract clase para hacer el código más reusable.
Aprenda más sobre Java con la ayuda de estos cursos en linea para java. ¿Te estás preparando para una entrevista en Java? Aquí están algunas preguntas de la entrevista sobre Programación Orientada a Objetos.