Menu
Coddy logo textTech

Herencia básica (extends)

Parte de la sección Programación Orientada a Objetos del Journey de Java de Coddy — lección 20 de 87.

La herencia es uno de los pilares fundamentales de la POO. Permite que una clase adquiera las propiedades y métodos de otra clase, promoviendo la reutilización de código y estableciendo una jerarquía natural entre las clases.

En Java, se crea una relación de herencia utilizando la palabra clave extends. La clase que hereda se llama subclase (o clase hija), y la clase de la que se hereda es la superclase (o clase padre).

public class Animal {
    private String name;
    
    public Animal(String name) {
        this.name = name;
    }
    
    public void eat() {
        System.out.println(name + " is eating");
    }
    
    public String getName() {
        return name;
    }
}

public class Dog extends Animal {
    public Dog(String name) {
        super(name);  // Llama al constructor padre
    }
    
    public void bark() {
        System.out.println(getName() + " says woof!");
    }
}

La clase Dog hereda automáticamente el método eat() y el método getName() de Animal. También puede definir sus propios métodos como bark():

Dog myDog = new Dog("Buddy");
myDog.eat();   // Heredado: "Buddy is eating"
myDog.bark();  // Método propio: "Buddy says woof!"

Piense en la herencia como una relación "es-un". Un Dog es un Animal, por lo que tiene sentido que Dog extienda a Animal. Esta relación le permite crear clases especializadas que comparten una funcionalidad común mientras agregan sus propios comportamientos únicos.

challenge icon

Desafío

Fácil

Vamos a construir un sistema de vehículos sencillo que demuestre la herencia en acción. Crearás una clase padre que contenga las propiedades comunes de los vehículos y una clase hija que la extienda con un comportamiento especializado.

Organizarás tu código en tres archivos:

  • Vehicle.java: Crea la clase padre que representa cualquier vehículo. Debe tener:
    • Un campo privado para la marca del vehículo brand (String)
    • Un constructor que acepte el nombre de la marca (el uso de super() no es necesario aquí ya que Vehicle es el padre)
    • Un método getBrand() que devuelva la marca
    • Un método start() que imprima: [brand] is starting
  • Motorcycle.java: Crea una subclase que extienda de Vehicle. Una motocicleta es un vehículo, por lo que esta relación "es-un" hace que la herencia sea apropiada. Tu Motorcycle debe:
    • Usar extends para heredar de Vehicle
    • Tener un constructor que reciba la marca y la pase al padre usando super(brand)
    • Añadir su propio método wheelie() que imprima: [brand] is doing a wheelie!
  • Main.java: Une todo creando un objeto Motorcycle y demostrando tanto los comportamientos heredados como los únicos. Recibirás una entrada: el nombre de la marca. Imprime dos líneas llamando a:
    • El método heredado start()
    • El método propio de Motorcycle wheelie()

Recibirás una entrada: el nombre de la marca (String) para tu motocicleta.

Observa cómo tu Motorcycle tiene acceso automáticamente a start() y getBrand() sin tener que volver a escribirlos: ¡ese es el poder de la herencia!

Hoja de referencia

Usa la palabra clave extends para crear una relación de herencia entre clases:

public class Animal {
    private String name;
    
    public Animal(String name) {
        this.name = name;
    }
    
    public void eat() {
        System.out.println(name + " is eating");
    }
    
    public String getName() {
        return name;
    }
}

public class Dog extends Animal {
    public Dog(String name) {
        super(name);  // Llama al constructor del padre
    }
    
    public void bark() {
        System.out.println(getName() + " says woof!");
    }
}

La subclase (hija) hereda todos los métodos de la superclase (padre) y puede añadir los suyos propios:

Dog myDog = new Dog("Buddy");
myDog.eat();   // Método heredado
myDog.bark();  // Método propio

Usa super() en el constructor de la subclase para llamar al constructor de la clase padre.

La herencia representa una relación "es-un" entre clases.

Pruébalo tú mismo

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String brand = scanner.nextLine();
        
        // TODO: Crea un objeto Motorcycle con la brand
        
        // TODO: Llama al método start() heredado
        
        // TODO: Llama al método wheelie()
    }
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Programación Orientada a Objetos