Herencia


martes, 5 de diciembre de 2023

La herencia en Java es uno de los pilares fundamentales de la programación orientada a objetos (POO). Proporciona un mecanismo mediante el cual una clase puede heredar propiedades y comportamientos de otra clase.

Jerarquía de Clases

En la herencia, las clases se organizan en una jerarquía, donde una clase más específica (subclase o clase hija) hereda características de una clase más general (superclase o clase padre).

Por ejemplo si tienes una clase Animal como superclase, podrías tener subclases como Perro y Gato.

La herencia modela la relación es un. Si una clase B hereda de una clase A, se puede decir que B es un tipo de A. Un Perro es un tipo de Animal.

En Java, la herencia se implementa usando la palabra clave extends. Cuando defines una clase hija, usas extends para indicar de qué clase está heredando.

public class Animal {
    // Superclase
}
public class Perro extends Animal { // código de la clase hija Perro }

Métodos y Atributos Heredados

La subclase hereda tanto los métodos como los atributos de la superclase. Esto significa que puede utilizar y modificar el comportamiento definido en la superclase.

Herencia de Atributos

La herencia de atributos permite que la clase hija acceda a los atributos de la clase padre. La visibilidad de estos atributos depende de sus modificadores de acceso (public, private, protected).

public class Animal {
    protected String nombre;

    public Animal(String nombre) {
        this.nombre = nombre;
    }
}

public class Perro extends Animal {
    // La clase Perro hereda el atributo nombre de la clase Animal
    // Puede acceder a él directamente o mediante métodos de la clase padre
}

Herencia de Métodos

Los métodos heredados pueden ser utilizados directamente en la subclase. La visibilidad depende de los modificadores de acceso (public, private, protected).

public class Animal {
    public void comer() {
        System.out.println("El animal come.");
    }
}

public class Perro extends Animal {
    // La clase Perro hereda el método comer de la clase Animal
}

public class Perro extends Animal {
    public void ladrar() {
        System.out.println("¡Guau, guau!");
    }

    public void realizarActividad() {
        comer(); // Acceso al método heredado de la superclase
        ladrar(); // Método propio de la subclase
    }
}

Override de Métodos

La clase hija puede proporcionar una implementación específica para un método que ya existe en la clase padre. Este proceso se conoce como override o sobrescribir el método de la clase padre.

public class Animal {
    public void hacerSonido() {
        System.out.println("El animal hace un sonido genérico.");
    }
}

public class Perro extends Animal {
    @Override
    public void hacerSonido() {
        System.out.println("El perro ladra.");
    }
}

Ejecutar Métodos de la Clase Padre

En casos donde se ha hecho override de un método, la clase hija puede llamar al método de la clase padre utilizando la palabra clave super.

public class Animal {
    public void comer() {
        System.out.println("El animal come.");
    }
}

public class Perro extends Animal {
    @Override
    public void comer() {
        super.comer(); // Llamada al método de la clase padre
        System.out.println("El perro mastica sus alimentos.");
    }
}

Acceso a Atributos de la Clase Padre

Los atributos heredados pueden ser utilizados directamente en la clase hija o mediante métodos proporcionados por la clase padre (si el atributo es privado).

public class Animal {
    private int edad;

    public Animal(int edad) {
        this.edad = edad;
    }

    public int obtenerEdad() {
        return this.edad;
    }
}

public class Perro extends Animal {
    // La clase Perro hereda el atributo edad de la clase Animal
    // Puede acceder a él a través del método obtenerEdad
}

Constructores en Herencia

Cuando creas una instancia de una clase hija, el constructor de la clase padre se llama implícitamente antes de que se ejecute el cuerpo del constructor de la clase hija.

Puedes usar la palabra clave super para hacer una llamada explícita al constructor de la clase padre desde el constructor de la clase hija. Esto es útil cuando la clase padre tiene un constructor que acepta parámetros. Por ejemplo:

public class Animal {
    public Animal(String nombre) {
        System.out.println("Constructor de Animal con nombre: " + nombre);
    }
}

public class Perro extends Animal {
    public Perro(String nombre) {
        super(nombre); // Llamada explícita al constructor de la clase Animal
        System.out.println("Constructor de Perro con nombre: " + nombre);
    }
}

Constructores Sobrecargados

Puedes tener constructores sobrecargados en las clases padre e hijas. Cada constructor puede inicializar diferentes conjuntos de propiedades.

public class Animal {
    public Animal() {
        System.out.println("Constructor sin parámetros de Animal");
    }

    public Animal(String nombre) {
        System.out.println("Constructor de Animal con nombre: " + nombre);
    }
}

public class Perro extends Animal {
    public Perro() {
        System.out.println("Constructor sin parámetros de Perro");
    }

    public Perro(String nombre) {
        super(nombre);
        System.out.println("Constructor de Perro con nombre: " + nombre);
    }
}

Orden Ejecución de Constructores

En una jerarquía de clases, los constructores se ejecutan en orden desde la clase superior hasta la clase más específica.

public class Animal {
    public Animal() {
        System.out.println("Constructor de Animal");
    }
}

public class Mamifero extends Animal {
    public Mamifero() {
        System.out.println("Constructor de Mamifero");
    }
}

public class Perro extends Mamifero {
    public Perro() {
        System.out.println("Constructor de Perro");
    }
}

Si creas una instancia de Perro, se ejecutarán los constructores en el orden: Animal -> Mamifero -> Perro.

Compártelo

Compártelo en tus redes sociales y desafía a tus amigos a resolver problemas de programación. Juntos, podemos aprender y crecer.

Copiado

El codigo se ha copiado correctamente en el portapapeles.

Más Ejercicios

Continua mejorando tus habilidades de programación en Java con nuestra selección de ejercicios prácticos de la lección. ¡Haz clic en Practicar y desafía tus conocimientos!

1

Clases y objetos

Explora los fundamentos de la programación orientada a objetos en Java. Aprende sobre clases y objetos, los componentes esenciales que dan vida a la modularidad y reutilización del código en este lenguaje de programación versátil.

2

Atributos y métodos

Explora la esencia de la programación orientada a objetos en Java al comprender a fondo los atributos y métodos. Descubre cómo estos elementos fundamentales son cruciales para la creación de clases y objetos, proporcionando modularidad y eficiencia en el desarrollo de software.

3

Constructores

Descubre la importancia de los constructores en Java y cómo inicializan objetos de manera crucial. Aprende las mejores prácticas para garantizar la coherencia en la creación de instancias y optimiza tu código con nuestros ejemplos detallados.

4

Modificadores de acceso

En Java los modificadores de acceso son fundamentales para controlar la visibilidad y el alcance de los atributos y métodos dentro de una clase. 

5

Getters y Setters

Aprende a crear interfaces seguras con métodos getters y setters en Java. Descubre cómo estos métodos favorecen la encapsulación y proporcionan un control preciso sobre la modificación de atributos.

6

Clase Persona y método ToString()

Crea un programa en Java que solicite tres nombres de personas al usuario y los almacene en un array de objetos de tipo Persona.

7

Constructores y destructores

Crea un programa en Java que solicite tres nombres de personas al usuario y los almacene en un array de objetos de tipo Persona.

8

Operador instanceof

El operador instanceof en Java se utiliza para verificar si un objeto es una instancia de una clase, subclase o implementa una interfaz específica.

9

Clases anidadas e internas

Las clases anidadas e internas en Java están definidas dentro de otra clase y tienen acceso a los miembros de la clase contenedora, incluyendo los miembros privados.

10

Clase persona, estudiante y profesor

Cree un nuevo proyecto en Java con tres clases más otra clase para probar la lógica del código. Las clases principales del programa son las siguientes clases.

11

Clase álbum de fotos

Cree un programa en Java para gestionar un álbum de fotos utilizando la programación orientada a objetos.

12

Creación de Clases y Objetos

Crear una clase llamada "Persona" con atributos como nombre, edad y dirección. Luego, crear objetos de la clase "Persona" e inicializar sus atributos. Implementar métodos para mostrar y modificar estos atributos.

13

Herencia

La herencia en Java es uno de los pilares fundamentales de la programación orientada a objetos (POO). Proporciona un mecanismo mediante el cual una clase puede heredar propiedades y comportamientos de otra clase.

14

Clases abstractas

Una clase abstracta es una clase que no puede ser instanciada directamente. Esto significa que no puedes crear objetos directamente a partir de una clase abstracta mediante el operador new.

15

Herencia de objetos

Crea un programa en Java que solicite tres nombres de personas al usuario y los almacene en un array de objetos de tipo Persona.

16

Formas - Diagrama de clases

Cree un programa en Java que represente el siguiente diagrama de clases UML.

17

Interfaces

Crea un programa en Java que implemente una interfaz IVehiculo con dos métodos, uno para Conducir de tipo void y otro para Repostar de tipo bool que tenga un parámetro de tipo entero con la cantidad de gasolina a repostar.

18

Clases abstractas

Crea un programa en Java que implemente una clase abstracta Animal que tenga una propiedad Nombre de tipo texto y tres métodos SetNombre(string nombre), GetNombre y Comer.

Programación orientada a objetos

Practica ejercicios en Java de programación orientada a objetos. Aprende a usar constructores, destructores, la herencia, las interfaces entre otros.

Conceptos fundamentales
Ejercicios prácticos

Seguir aprendiendo

Curso de Programación en C#

Curso de programación gratuito con ejercicios y soluciones prácticas en C#. ¡Comienza a aprender ahora mismo!

Exercises C# App

Lleva tus lecciones de Exercises C# a todas partes con nuestra aplicación para Android. Descárgala ahora desde Google Play.