Saltar al contenido principal

Herencia Java

Java La herencia es un concepto fundamental de la programación orientada a objetos que permite que una nueva clase herede propiedades y comportamientos (campos y métodos) de una clase existente. Esto favorece la reutilización del código y establece una relación jerárquica entre las clases.

Conceptos clave

  • Superclase (Clase padre): La clase cuyas propiedades y métodos se heredan.
  • Subclase (Clase hija): La clase que hereda de la superclase.

Utilización

La herencia se utiliza para crear una nueva clase que sea un tipo de una clase existente. Ayuda a ampliar la funcionalidad de una clase sin modificarla, respetando así el Principio Abierto/Cerrado del diseño de software.

Syntax


class Superclass {
    // fields and methods
}

class Subclass extends Superclass {
    // additional fields and methods
}

Ejemplos

Ejemplo 1: Herencia básica


class Animal {
    void eat() {
        System.out.println("This animal eats food.");
    }
}

class Dog extends Animal {
    void bark() {
        System.out.println("The dog barks.");
    }
}

public class InheritanceExample {
    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.eat();  // Inherited method
        dog.bark(); // Subclass method
    }
}

En este ejemplo, Dog es una subclase que hereda el método eat de la superclase Animal. La clase Dog también tiene su propio método, bark.

Ejemplo 2: Anulación de métodos


class Vehicle {
    void run() {
        System.out.println("The vehicle is running.");
    }
}

class Car extends Vehicle {
    @Override
    void run() {
        System.out.println("The car is running safely.");
    }
}

public class MethodOverridingExample {
    public static void main(String[] args) {
        Car car = new Car();
        car.run(); // Overridden method
    }
}

Aquí, la clase Car anula el método run de la clase Vehicle para proporcionar una implementación específica.

Ejemplo 3: Utilizando super Keyword


class Person {
    String name = "John";

    void display() {
        System.out.println("Person's name: " + name);
    }
}

class Employee extends Person {
    String name = "Doe";

    void display() {
        System.out.println("Employee's name: " + name);
        super.display(); // Call superclass method
    }
}

public class SuperKeywordExample {
    public static void main(String[] args) {
        Employee emp = new Employee();
        emp.display();
    }
}

En este ejemplo, la palabra clave super se utiliza para llamar al método display de la superclase Person desde la subclase Employee.

Consejos y buenas prácticas

  • Utiliza la Herencia Juiciosamente: Utiliza la herencia sólo cuando exista una verdadera relación "es-un". Por ejemplo, un Dog es un Animal.
  • Evita las Jerarquías de Herencia Profunda: Mantén las jerarquías de herencia poco profundas para mantener la simplicidad y reducir la complejidad.
  • Prefiere la Composición a la Herencia: Considera la posibilidad de utilizar la composición (relación has-a) en lugar de la herencia cuando proceda, ya que ofrece más flexibilidad.
  • Utiliza @Override Anotación: Utiliza siempre la anotación @Override al sobrescribir métodos para mejorar la legibilidad del código y evitar errores.
  • Control de acceso: Utiliza el modificador de acceso protected para los miembros de la superclase que deben ser accesibles en las subclases, pero no para el mundo exterior.