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 OOP. 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!"

Piensa en la herencia como una relación «es un». Un Dog es un Animal, por lo que tiene sentido que Dog extienda Animal. Esta relación te permite crear clases especializadas que comparten funcionalidades comunes mientras añaden sus propios comportamientos únicos.

challenge icon

Desafío

Fácil

Construyamos un sistema sencillo de vehículos que demuestre la herencia en acción. Crearás una clase principal que contenga las propiedades comunes de los vehículos y una clase secundaria que la amplíe con un comportamiento especializado.

Organizarás tu código en tres archivos:

  • Vehicle.java: Crea la clase principal que representa cualquier vehículo. Debe tener:
    • Un campo privado para la brand del vehículo (String)
    • Un constructor que acepte el nombre de la marca y lo asigne al campo. (Aquí no se necesita una llamada a super(), ya que Vehicle está en la parte superior de la jerarquía.)
    • Un método getBrand() que devuelva la marca
    • Un método start() que imprima: [brand] is starting
  • Motorcycle.java: Crea una subclase que amplíe Vehicle. Una motocicleta es un vehículo, por lo que esta relación de «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 se la pase a la clase principal mediante 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 propios. 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) de tu motocicleta.

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

REQUIRED OUTPUT FORMAT: [Your translated content here]

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 marca
        
        // 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

Practica por tu cuenta: Compilador de Java online