Saltar al contenido principal
eLearner.app
Módulo 3 · Lección 1 de 25/14 en el curso~12 min
Lecciones del módulo (1/2)

Herencia

La herencia es un mecanismo fundamental de la OOP que permite a una clase (llamada clase hija o subclase) heredar campos y métodos de otra clase (llamada clase padre o superclase).

Esto promueve la reutilización de código y evita duplicaciones innecesarias.

Extender una Clase con extends

En Java, usamos la palabra clave extends para indicar que una clase hereda de otra:

Code
class Vehicle {
    protected int speed; // 'protected' rende il campo visibile alle sottoclassi

    public void honk() {
        System.out.println("Beep beep!");
    }
}

class Car extends Vehicle {
    // Car eredita automaticamente il campo speed e il metodo honk()
}

El Constructor y la Palabra Clave super()

Si la superclase tiene un constructor que acepta parámetros, la subclase debe llamarlo explícitamente en su constructor usando super(...) como la primerísima instrucción:

Code
class Person {
    String name;

    public Person(String name) {
        this.name = name;
    }
}

class Student extends Person {
    int studentId;

    public Student(String name, int studentId) {
        super(name); // Richiama il costruttore di Person
        this.studentId = studentId;
    }
}

Sobrescritura de Métodos (@Override)

Una subclase puede proporcionar su propia implementación específica para un método heredado de la superclase. Esta operación se llama sobrescritura (method overriding) y se indica con la anotación @Override.

Code
class Animal {
    public void makeSound() {
        System.out.println("Rumore generico");
    }
}

class Cat extends Animal {
    @Override
    public void makeSound() {
        System.out.println("Miao!");
    }
}

El Modificador protected

El modificador de acceso protected juega un papel clave en la herencia. A diferencia de private, que hace que los miembros sean visibles solo dentro de la misma clase, protected permite el acceso a los campos y métodos tanto dentro del mismo paquete (package) como por parte de todas las subclases, incluso si se encuentran en paquetes diferentes.

Acceder a los Miembros del Padre con super

Además de invocar al constructor de la superclase, la palabra clave super se puede usar dentro de los métodos de la subclase para hacer referencia a métodos o variables de la clase padre. Esto es particularmente útil cuando se sobrescribe un método, pero aún se desea invocar el comportamiento original del padre:

Code
class Animal {
    public void sleep() {
        System.out.println("Zzz");
    }
}

class Cat extends Animal {
    @Override
    public void sleep() {
        super.sleep(); // Esegue il comportamento di Animal
        System.out.println("Il gatto fa le fusa mentre dorme.");
    }
}

Herencia Simple en Java

En Java, una clase puede extender una sola clase (herencia simple). No está permitido heredar directamente de múltiples clases (herencia múltiple), por ejemplo class Cat extends Animal, Mammal generará un error. Esta decisión de diseño evita ambigüedades conocidas como el "problema del diamante" (cuando dos superclases definen el mismo método con implementaciones diferentes). Para superar este límite, Java introduce el concepto de Interfaces, que veremos en el próximo módulo.


Pruébalo tú

Ejercicio#java.m3.l1.e1
Intentos: 0Cargando...

Completa la subclase Dog extendiendo Animal. Declara el constructor de Dog que acepta un nombre (String) y usa super(name) para pasarlo al constructor de Animal.

Cargando editor...
Mostrar pista

Escribe `public Dog(String name) { super(name); }` dentro de la clase Dog.

Solución disponible después de 3 intentos

Ejercicio#java.m3.l1.e2
Intentos: 0Cargando...

Extiende Dog de Animal y sobrescribe el método makeSound() de modo que devuelva la cadena Woof en lugar de Generic Sound. Usa la anotación @Override.

Cargando editor...
Mostrar pista

Escribe `@Override` sobre la declaración `public String makeSound() { return 'Woof'; }` dentro de Dog.

Solución disponible después de 3 intentos

Ejercicio#java.m3.l1.e3
Intentos: 0Cargando...

Declara una clase Cat que extienda Animal y sobrescriba el método makeSound() de modo que devuelva la cadena Meow. La clase Animal ya tiene un constructor que acepta un nombre; asegúrate de que el constructor de Cat acepte también un nombre y lo pase correctamente al constructor de la superclase.

Cargando editor...
Mostrar pista

Crea la clase `Cat` extendiendo `Animal`. Declara el constructor `public Cat(String name) { super(name); }` y sobrescribe el método `makeSound()` usando `@Override` para devolver `'Meow'`.

Solución disponible después de 3 intentos