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 unAnimal
. - 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.