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

Construyamos una jerarquía de transporte que demuestre patrones de herencia tanto simple como multinivel. Crearás una cadena de clases en la que cada nivel añade nuevas capacidades, mostrando cómo se heredan los métodos a través de varios niveles.

Organizarás tu código en cuatro archivos:

  • Vehicle.java: Crea la clase base en la parte superior de tu jerarquía. Todo 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 Vehicle, representando el nivel intermedio de tu cadena multinivel. Los vehículos terrestres añaden comportamientos específicos del suelo:
    • Un campo privado para wheels (int)
    • Un constructor que acepte brand y wheels, usando super(brand) para la parte correspondiente al 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 LandVehicle, completando tu cadena de herencia de tres niveles. Los automóviles añaden sus propias características especializadas:
    • Un campo privado para model (String)
    • Un constructor que acepte brand, wheels y model, 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 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 la propia clase Car

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

Tu salida debe mostrar tres líneas que demuestren cómo el objeto Car puede utilizar métodos de cada nivel de su cadena de herencia, desde Vehicle, el nivel superior, hasta su propia clase.

FORMATO DE SALIDA REQUERIDO: [Tu contenido traducido aquí]

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

Practica por tu cuenta: Compilador de Java online