13.5 Herencia y polimorfismo en Java: jerarquía de clases
La programación orientada a objetos (POO) es un paradigma de desarrollo de software que se basa en el concepto de "objetos", que pueden contener datos en forma de campos, a menudo conocidos como atributos, y código, en forma de procedimientos. a menudo conocidos como métodos. Dos de los pilares fundamentales de la programación orientada a objetos son la herencia y el polimorfismo, que permiten la creación de código más reutilizable y flexible.
Herencia en Java
La herencia es un mecanismo que permite crear una nueva clase basada en una clase existente. La nueva clase, conocida como subclase o clase derivada, hereda campos y métodos de la clase existente, que se denomina superclase o clase base. La herencia es una forma de reutilizar código y establecer una relación de tipos entre clases, creando una jerarquía.
En Java, la herencia se realiza con la palabra clave extends
. Por ejemplo:
clase Animal {
comer vacío() {
System.out.println("Este animal come");
}
}
clase Perro extiende Animal {
corteza vacía() {
System.out.println("El perro ladra");
}
}
Aquí, la clase Dog
extiende la clase Animal
, lo que significa que Dog
hereda eat()
. método.código> de Dog
puede llamar al método eat()
, incluso si no se ha definido explícitamente en la clase Dog
. p >
Java solo admite herencia simple, lo que significa que una clase solo puede extender una única clase. Sin embargo, una clase puede implementar múltiples interfaces, lo cual es un tema diferente y también una forma de lograr polimorfismo.
Polimorfismo en Java
El polimorfismo es la capacidad de un método de tener múltiples formas. En Java, esto se logra principalmente de dos maneras: sobrecargando polimorfismo y anulando.
El polimorfismo de sobrecarga ocurre cuando dos o más métodos en la misma clase tienen el mismo nombre pero diferentes parámetros. Por ejemplo:
clase Ejemplo { demostración nula (int a) { System.out.println("a: " + a); } demostración nula (int a, int b) { System.out.println("a y b: " + a + "," + b); } doble demostración(doble a) { System.out.println("doble a: " + a); devolver a*a; } }
El polimorfismo de superíndice, por otro lado, ocurre cuando una subclase tiene un método con la misma firma (nombre y parámetros) que un método en la superclase. Al anular un método, la subclase proporciona su propia implementación. Un ejemplo de esto sería:
clase Animal {
sonido vacío() {
System.out.println("El animal emite un sonido");
}
}
clase Perro extiende Animal {
@Anular
sonido vacío() {
System.out.println("El perro ladra");
}
}
Con polimorfismo predominante, cuando se invoca un método, se llama al método de la subclase, no al de la superclase. Usar la anotación @Override
es opcional, pero es una buena práctica de programación, ya que ayuda a evitar errores y hace que el código sea más legible.
Jerarquía de clases
La jerarquía de clases es la organización de clases en una estructura de árbol donde la clase base es el nodo raíz y las subclases son los nodos secundarios. Esta estructura permite la reutilización de código y la gestión de la complejidad en sistemas grandes. En una jerarquía de clases, una subclase hereda el estado y el comportamiento de la superclase, pudiendo agregar nuevos campos y métodos o anular los existentes.
Un ejemplo clásico de jerarquía de clases es la clasificación biológica. Por ejemplo, la clase Mammal
puede extender la clase Animal
y la clase Dog
puede extender la clase Mammal
. Cada nivel de la jerarquía agrega características específicas que son heredadas por los niveles inferiores.
Consideraciones finales
La herencia y el polimorfismo son conceptos esenciales en el desarrollo orientado a objetos. Le permiten crear una estructura de código que es flexible y fácil de mantener. La herencia le permite establecer una relación "es-a" entre clases, mientras que el polimorfismo permite que los objetos de diferentes clases sean tratados de manera uniforme. Juntos, proporcionan potentes herramientas para desarrollar software en Java y muchos otros lenguajes de programación orientados a objetos.
Comprender y aplicar correctamente la herencia y el polimorfismo puede ser un desafío para los programadores principiantes, pero es esencial para crear sistemas robustos y escalables. Con la práctica y el estudio de estos conceptos, los desarrolladores pueden dominar el arte de la programación orientada a objetos y crear aplicaciones Java eficientes y de alta calidad.