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
Doges 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
@OverrideAnotación: Utiliza siempre la anotación@Overrideal sobrescribir métodos para mejorar la legibilidad del código y evitar errores. - Control de acceso: Utiliza el modificador de acceso
protectedpara los miembros de la superclase que deben ser accesibles en las subclases, pero no para el mundo exterior.