La herencia en la programación Java es el proceso por el cual una clase toma la propiedad de otra clase. es decir, las nuevas clases, conocidas como clases derivadas o secundarias, asumen los atributos y el comportamiento de las clases preexistentes, que se denominan clases base o superclase o clase principal.
Delegar es simplemente pasar un deber a alguien/algo más.
- La delegación puede ser una alternativa a la herencia.
- Delegación significa que utiliza un objeto de otra clase como una variable de instancia y reenvía mensajes a la instancia.
- Es mejor que la herencia para muchos casos porque te hace pensar en cada mensaje que reenvías, porque la instancia es de una clase conocida, en lugar de una clase nueva, y porque no te obliga a aceptar todos los métodos del super clase: puede proporcionar solo los métodos que realmente tienen sentido.
- La delegación se puede ver como una relación entre objetos en la que un objeto reenvía ciertas llamadas de método a otro objeto, llamado su delegado.
- La principal ventaja de la delegación es la flexibilidad del tiempo de ejecución: el delegado se puede cambiar fácilmente en el tiempo de ejecución. Pero a diferencia de la herencia, la delegación no es compatible directamente con los lenguajes orientados a objetos más populares y no facilita el polimorfismo dinámico .
Java
// Java program to illustrate // delegation class RealPrinter { // the "delegate" void print() { System.out.println("The Delegate"); } } class Printer { // the "delegator" RealPrinter p = new RealPrinter(); // create the delegate void print() { p.print(); // delegation } } public class Tester { // To the outside world it looks like Printer actually prints. public static void main(String[] args) { Printer printer = new Printer(); printer.print(); } }
Producción:
The Delegate
Cuando delega, simplemente está llamando a alguna clase que sabe lo que debe hacerse. Realmente no te importa cómo lo hace, lo único que te importa es que la clase a la que llamas sepa lo que hay que hacer.
Mismo código usando Herencia
Java
// Java program to illustrate // Inheritance class RealPrinter { // base class implements method void print() { System.out.println("Printing Data"); } } 3 // Printer Inheriting functionality of real printer class Printer extends RealPrinter { void print() { super.print(); // inside calling method of parent } } public class Tester { // To the outside world it looks like Printer actually prints. public static void main(String[] args) { Printer printer = new Printer(); printer.print(); } }
Producción:
Printing Data
¿Cuándo usar qué?
Estos son algunos ejemplos cuando se utilizan la herencia o la delegación:
suponga que su clase se llama B y la clase derivada/delegada se llama A, entonces si
- Quiere expresar la relación (es-a) y luego quiere usar Herencia.
- Desea poder pasar su clase a una API existente que espera A, entonces necesita usar la herencia.
- Desea mejorar A, pero A es final y ya no se puede subclasificar, entonces necesita usar composición y delegación.
- Desea la funcionalidad de un método y no desea anular el método, entonces debe optar por la delegación.
Este artículo es una contribución de Abhishek Gupta . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA