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:
nameyage. - Un constructor que inicializa estos campos.
- Un método
makeSoundque 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
makeSoundpara 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
Vehiclecon los siguientes campos y métodos:- Campos:
make(marca),model(modelo),year(año). - Constructor para inicializar estos campos.
- Método
startEngineque imprime "Engine started".
- Campos:
-
Crear una subclase
Carque herede deVehicley añada:- Campo adicional:
numberOfDoors(número de puertas). - Constructor que inicialice todos los campos, incluyendo los de la superclase.
- Método
honkque 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
