Content-Type: application/x-php Métodos abstractos en Java: contrato, override y errores comunes | Línea de Código

Java

Métodos abstractos en Java: contrato, override y errores comunes

Un método abstracto dice qué debe existir, pero deja a cada subclase decidir cómo hacerlo.

Tipo: Guía práctica Lectura: 4 min Actualizado: 2026-06-03
Contrato de métodos abstractos en Java implementado por varias subclases.

Contrato

Qué obliga un método abstracto

Un método abstracto declara una operación que las subclases deben completar. La clase base sabe que esa operación existe, pero no conoce el detalle concreto de cada implementación.

Sirve cuando varias clases comparten una estructura común y solo cambia una parte. Si todo cambia y no hay estado compartido, revisa si una interfaz expresa mejor la idea.

Ejemplo con cálculo distinto por subclase

abstract class Envio {
    abstract double coste(double kilos);

    String resumen(double kilos) {
        return "Coste: " + coste(kilos);
    }
}

class EnvioLocal extends Envio {
    @Override
    double coste(double kilos) {
        return 4.95 + kilos * 0.80;
    }
}

class EnvioUrgente extends Envio {
    @Override
    double coste(double kilos) {
        return 9.95 + kilos * 1.50;
    }
}

Envio define resumen una sola vez y obliga a cada subclase a calcular coste. Si EnvioUrgente no implementa coste, no puede ser una clase concreta.

Errores de compilación frecuentes

Error Causa Solución
Missing method body El método debía ser abstract o tener bloque Añade abstract y punto y coma, o implementa el cuerpo
Class must be declared abstract La clase contiene un método abstracto Marca la clase con abstract o completa el método
Method does not override Firma distinta en la subclase Revisa nombre, parámetros, retorno y visibilidad
Cannot instantiate Intentas crear la clase abstracta Instancia una subclase concreta

Cómo probar que el diseño tiene sentido

  1. Escribe una subclase simple y otra con lógica diferente.
  2. Comprueba que ambas usan la misma firma de método.
  3. Añade @Override en todas las implementaciones.
  4. Mueve a la clase base solo la lógica que realmente se repite.
  5. Si el método abstracto no aporta contrato claro, elimina la abstracción.

Relación con polimorfismo

El valor práctico aparece cuando el código puede trabajar con el tipo base. Una lista de Envio puede contener EnvioLocal y EnvioUrgente; al llamar coste, Java ejecuta la implementación concreta.

Eso reduce condicionales como if tipo == urgente. En lugar de preguntar qué clase es cada objeto, se llama al método común y cada subclase responde. El diseño mejora si los nombres son claros y las subclases representan casos reales.

Preguntas frecuentes

¿Un método abstracto puede ser private?

No tendría sentido: una subclase no podría implementarlo. Usa una visibilidad que permita override.

¿Puede una clase abstracta tener métodos normales?

Sí. De hecho, una clase abstracta suele mezclar métodos concretos compartidos con métodos abstractos que varían.

¿Debo usar @Override?

Sí. Ayuda al compilador a avisarte si la firma no coincide con el método abstracto.

Fuentes consultadas

Fuentes y referencias

Consulta referencias útiles para ampliar o contrastar esta guía.

Marcos Vidal

Autora de la guia

Marcos Vidal

Editor de guías de programación práctica

Prepara ejemplos y explicaciones de PHP, Java y JavaScript para que cada snippet se pueda probar, adaptar y mantener con menos dudas.

Credenciales: Experiencia editorial en tutoriales técnicos, revisión de snippets y documentación para estudiantes de programación.

Experiencia: Trabaja con ejemplos mínimos, pruebas manuales y listas de comprobación para reducir errores de integración.

Actualizado: 2026-06-03 Politica editorial Correcciones

Por que confiar

Contrastamos fuentes oficiales, actualizamos piezas clave y priorizamos estructura, contexto y enlazado interno por encima del relleno.

Compartir

Guarda o comparte esta guia con el enlace limpio.