Breaking

Post Top Ad

Your Ad Spot

jueves, 19 de diciembre de 2019

Herencia Java

En este tutorial, aprenderemos sobre la herencia en Java con la ayuda de ejemplos.
La herencia es una de las características clave de OOP (Programación orientada a objetos) que nos permite definir una nueva clase a partir de una clase existente. Por ejemplo,
  1. class Animal
  2. {
  3. // eat() method
  4. // sleep() method
  5. }
  6. class Dog extends Animal
  7. {
  8. // bark() method
  9. }
En Java, usamos la extendspalabra clave para heredar de una clase. Aquí, hemos heredado la clase Perro de la clase Animal .
El animal es la superclase (clase principal o clase base), y el perro es una subclase (clase secundaria o clase derivada). La subclase hereda los campos y métodos de la superclase.
Introducción a la herencia de Java

es una relación

La herencia es una relación es-es . Usamos la herencia solo si hay una relación is -a entre las dos clases.
Aquí hay unos ejemplos:
  • Un carro es un vehículo.
  • La naranja es una fruta.
  • Un cirujano es médico.
  • Un perro es un animal.

Ejemplo 1: herencia de Java

  1. class Animal {
  2. public void eat() {
  3. System.out.println("I can eat");
  4. }
  5. public void sleep() {
  6. System.out.println("I can sleep");
  7. }
  8. }
  9. class Dog extends Animal {
  10. public void bark() {
  11. System.out.println("I can bark");
  12. }
  13. }
  14. class Main {
  15. public static void main(String[] args) {
  16. Dog dog1 = new Dog();
  17. dog1.eat();
  18. dog1.sleep();
  19. dog1.bark();
  20. }
  21. }
Salida
puedo comer
yo puedo dormir
Puedo ladrar
Aquí, hemos heredado una subclase Perro de la superclase Animal . La clase Perro hereda los métodos eat()sleep()de la clase Animal .
Por lo tanto, los objetos de la clase Perro pueden acceder a los miembros tanto de la clase Perro como de la clase Animal .
En la herencia Java, los objetos de la subclase pueden llamar a miembros de la superclase.

Palabra clave protegida

Hemos aprendido acerca de privatepublicacceso modificadores en tutoriales anteriores.
  • private solo se puede acceder a los miembros dentro de la clase
  • public Se puede acceder a los miembros desde cualquier lugar
También puede asignar métodos y campos protectedLos miembros protegidos son accesibles.
  • desde dentro de la clase
  • dentro de sus subclases
  • dentro del mismo paquete
Aquí hay un resumen de donde se puede acceder a los modificadores de acceso.
 ClasePaquetesubclaseMundo
público
privadoNoNoNo
protegidoNo

Ejemplo 2: palabra clave protegida

  1. class Animal {
  2. protected String type;
  3. private String color;
  4. public void eat() {
  5. System.out.println("I can eat");
  6. }
  7. public void sleep() {
  8. System.out.println("I can sleep");
  9. }
  10. public String getColor(){
  11. return color;
  12. }
  13. public void setColor(String col){
  14. color = col;
  15. }
  16. }
  17. class Dog extends Animal {
  18. public void displayInfo(String c){
  19. System.out.println("I am a " + type);
  20. System.out.println("My color is " + c);
  21. }
  22. public void bark() {
  23. System.out.println("I can bark");
  24. }
  25. }
  26. class Main {
  27. public static void main(String[] args) {
  28. Dog dog1 = new Dog();
  29. dog1.eat();
  30. dog1.sleep();
  31. dog1.bark();
  32. dog1.type = "mammal";
  33. dog1.setColor("black");
  34. dog1.displayInfo(dog1.getColor());
  35. }
  36. }
Salida
puedo comer
yo puedo dormir
Puedo ladrar
Soy un mamifero
Mi color es negro
Aquí, el typecampo dentro de la Animalclase está protegido. Hemos accedido a este campo desde la Mainclase usando
  1. dog1.type = "mammal";
Es posible porque Animaly la Mainclase están en el mismo paquete (mismo archivo).

Método de anulación de Java

De los ejemplos anteriores, sabemos que los objetos de una subclase también pueden acceder a los métodos de su superclase.
¿ Qué sucede si se define el mismo método tanto en la superclase como en la subclase?
Bueno, en ese caso, el método en la subclase anula el método en la superclase. Por ejemplo,

Ejemplo 3: Ejemplo de anulación de método

  1. class Animal {
  2. protected String type = "animal";
  3. public void eat() {
  4. System.out.println("I can eat");
  5. }
  6. public void sleep() {
  7. System.out.println("I can sleep");
  8. }
  9. }
  10. class Dog extends Animal {
  11. @Override
  12. public void eat() {
  13. System.out.println("I eat dog food");
  14. }
  15. public void bark() {
  16. System.out.println("I can bark");
  17. }
  18. }
  19. class Main {
  20. public static void main(String[] args) {
  21. Dog dog1 = new Dog();
  22. dog1.eat();
  23. dog1.sleep();
  24. dog1.bark();
  25. }
  26. }
Salida
Yo como comida para perros
yo puedo dormir
Puedo ladrar
Aquí, eat()está presente tanto en la superclase Animal como en la subclase Perro . Creamos un objeto dog1 de la subclase Dog .
Cuando llamamos eat()usando el objeto dog1 , se llama al método dentro del perro , y no se llama al mismo método de la superclase. Esto se llama anulación de método.
En el programa anterior, hemos usado la @Override anotación para decirle al compilador que estamos anulando un método. Sin embargo, no es obligatorio. Aprenderemos sobre la anulación de métodos en detalle en el próximo tutorial.
Si necesitamos llamar al eat()método Animal desde sus subclases, usamos la superpalabra clave.

Ejemplo 4: palabra clave super

  1. class Animal {
  2. public Animal() {
  3. System.out.println("I am an Animal");
  4. }
  5. public void eat() {
  6. System.out.println("I can eat");
  7. }
  8. }
  9. class Dog extends Animal {
  10. public Dog(){
  11. super();
  12. System.out.println("I am a dog");
  13. }
  14. @Override
  15. public void eat() {
  16. super.eat();
  17. System.out.println("I eat dog food");
  18. }
  19. public void bark() {
  20. System.out.println("I can bark");
  21. }
  22. }
  23. class Main {
  24. public static void main(String[] args) {
  25. Dog dog1 = new Dog();
  26. dog1.eat();
  27. dog1.bark();
  28. }
  29. }
Salida
Yo soy un animal
soy un perro
puedo comer
Yo como comida para perros
Puedo ladrar
Aquí, hemos usado la superpalabra clave para llamar al constructor usando super()Además, hemos llamado al eat()método de superclase Animal usando super.eat().
Tenga en cuenta la diferencia en el uso de superal llamar al constructor y al método. Para obtener más información, visite la palabra clave super .

Tipos de herencia

Hay cinco tipos de herencia.
  • Herencia única : la clase B se extiende desde la clase A solamente.
  • Herencia multinivel : la clase B se extiende desde la clase A ; a continuación, la clase C se extiende desde la clase B .
  • Herencia jerárquica - Clase A actúa como la superclase para las clases B , C , y D .
  • La herencia múltiple - Clase C se extiende desde las interfaces A y B .
  • Herencia híbrida : mezcla de dos o más tipos de herencia.
Java no admite herencia múltiple e híbrida a través de clases. Sin embargo, podemos lograr herencia múltiple en Java a través de interfaces. Aprenderemos sobre las interfaces en capítulos posteriores.

¿Por qué usar la herencia?

  • El uso más importante es la reutilización del código. El código que está presente en la clase primaria no necesita escribirse nuevamente en la clase secundaria.
  • Para lograr el polimorfismo de tiempo de ejecución a través de la anulación del método. Aprenderemos más sobre el polimorfismo en capítulos posteriores.

No hay comentarios.:

Publicar un comentario

Dejanos tu comentario para seguir mejorando!

Post Top Ad

Your Ad Spot

Páginas