La herencia es uno de los pilares fundamentales de la Programación Orientada a Objetos (POO). Permite que una clase (subclase o clase derivada) herede campos y métodos de otra clase (superclase o clase base). Esto promueve la reutilización del código y establece una relación jerárquica entre las clases.
Conceptos Clave
- Superclase (Clase Base): La clase de la cual se heredan campos y métodos.
- Subclase (Clase Derivada): La clase que hereda campos y métodos de la superclase.
- Palabra clave
extends
: Utilizada para indicar que una clase hereda de otra.
Ejemplo Básico de Herencia
Superclase: Animal
public class Animal { // Campos protected String name; protected int age; // Constructor public Animal(String name, int age) { this.name = name; this.age = age; } // Método public void makeSound() { System.out.println("Some generic animal sound"); } }
Subclase: Dog
public class Dog extends Animal { // Campo adicional private String breed; // Constructor public Dog(String name, int age, String breed) { super(name, age); // Llamada al constructor de la superclase this.breed = breed; } // Método adicional public void fetch() { System.out.println(name + " is fetching the ball!"); } // Sobrescritura de método @Override public void makeSound() { System.out.println("Bark"); } }
Uso de las Clases
public class Main { public static void main(String[] args) { Dog myDog = new Dog("Buddy", 3, "Golden Retriever"); myDog.makeSound(); // Salida: Bark myDog.fetch(); // Salida: Buddy is fetching the ball! } }
Explicación del Código
-
Superclase
Animal
:- Tiene dos campos:
name
yage
. - Un constructor que inicializa estos campos.
- Un método
makeSound
que imprime un sonido genérico.
- Tiene dos campos:
-
Subclase
Dog
:- Hereda los campos y métodos de
Animal
. - Añade un campo adicional
breed
. - Tiene su propio constructor que llama al constructor de la superclase usando
super
. - Añade un método
fetch
. - Sobrescribe el método
makeSound
para proporcionar una implementación específica.
- Hereda los campos y métodos de
Ejercicio Práctico
Ejercicio 1: Crear una Jerarquía de Clases
-
Crear una superclase
Vehicle
con los siguientes campos y métodos:- Campos:
make
(marca),model
(modelo),year
(año). - Constructor para inicializar estos campos.
- Método
startEngine
que imprime "Engine started".
- Campos:
-
Crear una subclase
Car
que herede deVehicle
y añada:- Campo adicional:
numberOfDoors
(número de puertas). - Constructor que inicialice todos los campos, incluyendo los de la superclase.
- Método
honk
que imprima "Honk! Honk!".
- Campo adicional:
Solución
Superclase: Vehicle
public class Vehicle { protected String make; protected String model; protected int year; public Vehicle(String make, String model, int year) { this.make = make; this.model = model; this.year = year; } public void startEngine() { System.out.println("Engine started"); } }
Subclase: Car
public class Car extends Vehicle { private int numberOfDoors; public Car(String make, String model, int year, int numberOfDoors) { super(make, model, year); this.numberOfDoors = numberOfDoors; } public void honk() { System.out.println("Honk! Honk!"); } }
Uso de las Clases
public class Main { public static void main(String[] args) { Car myCar = new Car("Toyota", "Corolla", 2020, 4); myCar.startEngine(); // Salida: Engine started myCar.honk(); // Salida: Honk! Honk! } }
Resumen
En esta sección, hemos aprendido sobre la herencia en Java, cómo crear superclases y subclases, y cómo utilizar la palabra clave extends
para establecer relaciones jerárquicas entre clases. También hemos visto cómo sobrescribir métodos y añadir nuevos campos y métodos en las subclases. La herencia es una herramienta poderosa que permite la reutilización del código y la creación de estructuras de clases más organizadas y mantenibles.
Curso de Programación en Java
Módulo 1: Introducción a Java
- Introducción a Java
- Configuración del Entorno de Desarrollo
- Sintaxis y Estructura Básica
- Variables y Tipos de Datos
- Operadores
Módulo 2: Flujo de Control
Módulo 3: Programación Orientada a Objetos
- Introducción a la POO
- Clases y Objetos
- Métodos
- Constructores
- Herencia
- Polimorfismo
- Encapsulamiento
- Abstracción
Módulo 4: Programación Orientada a Objetos Avanzada
Módulo 5: Estructuras de Datos y Colecciones
Módulo 6: Manejo de Excepciones
- Introducción a las Excepciones
- Bloque Try-Catch
- Throw y Throws
- Excepciones Personalizadas
- Bloque Finally
Módulo 7: Entrada/Salida de Archivos
- Lectura de Archivos
- Escritura de Archivos
- Flujos de Archivos
- BufferedReader y BufferedWriter
- Serialización
Módulo 8: Multihilo y Concurrencia
- Introducción al Multihilo
- Creación de Hilos
- Ciclo de Vida de un Hilo
- Sincronización
- Utilidades de Concurrencia
Módulo 9: Redes
- Introducción a las Redes
- Sockets
- ServerSocket
- DatagramSocket y DatagramPacket
- URL y HttpURLConnection