Menu
Coddy logo textTech

Herencia simple y multinivel

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

Hasta ahora, hemos visto clases que extienden directamente a una clase padre. Pero la herencia puede formar diferentes estructuras dependiendo de cómo se relacionen las clases entre sí. Exploremos los dos patrones principales: herencia simple y herencia multinivel.

La herencia simple es lo que hemos estado usando. Una clase extiende exactamente una clase padre directamente:

public class Animal { }
public class Dog extends Animal { }
public class Cat extends Animal { }

Aquí, tanto Dog como Cat heredan de Animal, pero no heredan entre sí. Cada hijo tiene un padre directo.

La herencia multinivel crea una cadena donde una clase extiende a otra clase, la cual a su vez extiende a otra clase:

public class Animal {
    public void eat() {
        System.out.println("Eating");
    }
}

public class Mammal extends Animal {
    public void breathe() {
        System.out.println("Breathing");
    }
}

public class Dog extends Mammal {
    public void bark() {
        System.out.println("Barking");
    }
}

En esta cadena, Dog hereda de Mammal, que hereda de Animal. Un objeto Dog tiene acceso a todos los métodos de toda la cadena:

Dog dog = new Dog();
dog.eat();      // De Animal
dog.breathe();  // De Mammal
dog.bark();     // De Dog

Recuerda que Object se encuentra en la parte superior de cada cadena. Así que nuestro Dog en realidad tiene cuatro niveles: Object -> Animal -> Mammal -> Dog. El encadenamiento de constructores fluye a través de todos estos niveles al crear un nuevo objeto.

challenge icon

Desafío

Fácil

Vamos a construir una jerarquía de transporte que demuestre patrones de herencia simple y multinivel. Crearás una cadena de clases donde cada nivel añade nuevas capacidades, mostrando cómo se heredan los métodos a través de múltiples niveles.

Organizarás tu código en cuatro archivos:

  • Vehicle.java: Crea la clase base en la parte superior de tu jerarquía. Cada vehículo debe tener:
    • Un campo privado para brand (String)
    • Un constructor que acepte la marca
    • Un método getBrand() que devuelva la marca
    • Un método move() que imprima: [brand] is moving
  • LandVehicle.java: Crea una clase que extienda de Vehicle, representando el nivel intermedio de tu cadena multinivel. Los vehículos terrestres añaden un comportamiento específico para el suelo:
    • Un campo privado para wheels (int)
    • Un constructor que tome la marca y las ruedas, usando super(brand) para la parte del padre
    • Un método getWheels() que devuelva el número de ruedas
    • Un método honk() que imprima: [brand] honks!
  • Car.java: Crea una clase que extienda de LandVehicle, completando tu cadena de herencia de tres niveles. Los coches añaden sus propias características especializadas:
    • Un campo privado para model (String)
    • Un constructor que tome la marca, las ruedas y el modelo, usando super(brand, wheels)
    • Un método getModel() que devuelva el modelo
    • Un método displayInfo() que imprima: [brand] [model] with [wheels] wheels
  • Main.java: Demuestra cómo un objeto Car tiene acceso a los métodos de los tres niveles de la jerarquía. Recibirás tres entradas: brand (String), wheels (int) y model (String). Crea un Car y llama a estos métodos en orden:
    • move() - heredado de Vehicle (abuelo)
    • honk() - heredado de LandVehicle (padre)
    • displayInfo() - definido en el propio Car

Recibirás tres entradas: el nombre de la marca, el número de ruedas y el nombre del modelo.

Tu salida debería mostrar tres líneas demostrando cómo el objeto Car puede usar métodos de cada nivel de su cadena de herencia - ¡desde el nivel superior Vehicle hasta su propia clase!

Hoja de referencia

Java soporta diferentes estructuras de herencia. Los dos patrones principales son la herencia simple y la herencia multinivel.

La herencia simple ocurre cuando una clase extiende exactamente una clase padre directamente:

public class Animal { }
public class Dog extends Animal { }
public class Cat extends Animal { }

Tanto Dog como Cat heredan de Animal, pero no el uno del otro.

La herencia multinivel crea una cadena donde una clase extiende a otra clase, la cual a su vez extiende a otra clase:

public class Animal {
    public void eat() {
        System.out.println("Eating");
    }
}

public class Mammal extends Animal {
    public void breathe() {
        System.out.println("Breathing");
    }
}

public class Dog extends Mammal {
    public void bark() {
        System.out.println("Barking");
    }
}

En la herencia multinivel, una clase hija tiene acceso a todos los métodos de toda la cadena de herencia:

Dog dog = new Dog();
dog.eat();      // De Animal
dog.breathe();  // De Mammal
dog.bark();     // De Dog

Cada jerarquía de clases tiene a Object en la cima. El encadenamiento de constructores fluye a través de todos los niveles al crear un nuevo objeto.

Pruébalo tú mismo

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // Leer entradas
        String brand = scanner.nextLine();
        int wheels = scanner.nextInt();
        scanner.nextLine(); // consumir nueva línea
        String model = scanner.nextLine();
        
        // TODO: Crear un objeto Car con los valores de entrada
        
        // TODO: Llamar a move() - heredado de Vehicle (abuelo)
        
        // TODO: Llamar a honk() - heredado de LandVehicle (padre)
        
        // TODO: Llamar a displayInfo() - definido en el propio Car
    }
}
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