Breaking

Post Top Ad

Your Ad Spot

jueves, 19 de diciembre de 2019

Java super

En este tutorial, aprenderemos sobre la súper palabra clave en Java con la ayuda de ejemplos.
La superpalabra clave en Java se usa en subclases para acceder a los miembros de la superclase (atributos, constructores y métodos).
Antes de conocer la superpalabra clave, asegúrese de conocer la herencia de Java .

Usos de la palabra clave super

  1. Para llamar a los métodos de la superclase que se reemplaza en la subclase.
  2. Para acceder a los atributos (campos) de la superclase si tanto la superclase como la subclase tienen atributos con el mismo nombre.
  3. Para llamar explícitamente a la superclase no-arg (por defecto) o al constructor parametrizado desde el constructor de la subclase.
Comprendamos cada uno de estos usos.

1. Acceso a métodos anulados de la superclase

Si los métodos con el mismo nombre se definen tanto en la superclase como en la subclase, el método de la subclase anula el método de la superclase. Esto se llama anulación de método .

Ejemplo 1: anulación del método

  1. class Animal {
  2. // overridden method
  3. public void display(){
  4. System.out.println("I am an animal");
  5. }
  6. }
  7. class Dog extends Animal {
  8. // overriding method
  9. @Override
  10. public void display(){
  11. System.out.println("I am a dog");
  12. }
  13. public void printMessage(){
  14. display();
  15. }
  16. }
  17. class Main {
  18. public static void main(String[] args) {
  19. Dog dog1 = new Dog();
  20. dog1.printMessage();
  21. }
  22. }
Salida
soy un perro
En este ejemplo, al hacer un objeto dog1 de la clase Dog , podemos llamar a su método printMessage () que luego ejecuta la display()instrucción.
Como display()se define en ambas clases, el método de la subclase Dog anula el método de la superclase Animal . Por lo tanto, display()de la subclase se llama.
Ejemplo de anulación de Java
¿Qué pasa si se debe llamar al método anulado de la superclase?
Usamos super.display()si el método anulado display()de la superclase Animal necesita ser llamado.

Ejemplo 2: Método Super a Call Superclass

  1. class Animal {
  2. // overridden method
  3. public void display(){
  4. System.out.println("I am an animal");
  5. }
  6. }
  7. class Dog extends Animal {
  8. // overriding method
  9. @Override
  10. public void display(){
  11. System.out.println("I am a dog");
  12. }
  13. public void printMessage(){
  14. // this calls overriding method
  15. display();
  16. // this calls overridden method
  17. super.display();
  18. }
  19. }
  20. class Main {
  21. public static void main(String[] args) {
  22. Dog dog1 = new Dog();
  23. dog1.printMessage();
  24. }
  25. }
Salida
soy un perro
Soy un animal
Aquí, cómo funciona el programa anterior.
Trabajo de super en Java

2. Atributos de acceso de la superclase

La superclase y la subclase pueden tener atributos con el mismo nombre. Usamos la superpalabra clave para acceder al atributo de la superclase.

Ejemplo 3: atributo de superclase de acceso

  1. class Animal {
  2. protected String type="animal";
  3. }
  4. class Dog extends Animal {
  5. public String type="mammal";
  6. public void printType() {
  7. System.out.println("I am a " + type);
  8. System.out.println("I am an " + super.type);
  9. }
  10. }
  11. class Main {
  12. public static void main(String[] args) {
  13. Dog dog1 = new Dog();
  14. dog1.printType();
  15. }
  16. }
Cuando ejecutamos este programa, la salida será:
Soy un mamifero
Soy un animal
En este ejemplo, hemos definido el mismo tipo de campo de instancia tanto en la superclase Animal como en la subclase Perro .
Luego creamos un objeto dog1 de la clase Dog . Entonces, el printType()método se llama usando este objeto.
Dentro de la printType()función,
  • tipo se refiere al atributo de la subclase Perro .
  • super.type se refiere al atributo de la superclase Animal.
Por lo tanto, System.out.println("I am a " + type);impresionesSoy un mamiferoY, System.out.println("I am an " + super.type);impresionesSoy un animal.

3. Uso de super () para acceder al constructor de superclase

Como sabemos, cuando se crea un objeto de una clase, su constructor predeterminado se llama automáticamente.
Para llamar explícitamente al constructor de la superclase desde el constructor de la subclase, utilizamos super()Es una forma especial de la superpalabra clave.
super() solo se puede usar dentro del constructor de subclase y debe ser la primera instrucción.

Ejemplo 4: uso de super ()

  1. class Animal {
  2. // default or no-arg constructor of class Animal
  3. Animal() {
  4. System.out.println("I am an animal");
  5. }
  6. }
  7. class Dog extends Animal {
  8. // default or no-arg constructor of class Dog
  9. Dog() {
  10. // calling default constructor of the superclass
  11. super();
  12. System.out.println("I am a dog");
  13. }
  14. }
  15. class Main {
  16. public static void main(String[] args) {
  17. Dog dog1 = new Dog();
  18. }
  19. }
Salida
Soy un animal
soy un perro
Aquí, cuando se crea un objeto dog1 de la clase Dog , llama automáticamente al constructor predeterminado o sin argumentos de esa clase.
Dentro del constructor de la subclase, la super()declaración llama al constructor de la superclase y ejecuta las declaraciones dentro de ella. Por lo tanto, obtenemos la salidaSoy un animal.
Trabajo de super () en Java
El flujo del programa luego regresa al constructor de la subclase y ejecuta las declaraciones restantes. Así,soy un perro será impreso
Sin embargo, el uso super()no es obligatorio. Incluso si super()no se usa en el constructor de la subclase, el compilador llama implícitamente al constructor predeterminado de la superclase.
Entonces, ¿por qué usar código redundante si el compilador invoca automáticamente super ()?
Se requiere si el constructor parametrizado (un constructor que toma argumentos) de la superclase debe llamarse desde el constructor de la subclase.
El parametrizado super()siempre debe ser la primera instrucción en el cuerpo del constructor de la subclase, de lo contrario, obtenemos un error de compilación.

Ejemplo 5: Llame al Constructor parametrizado usando super ()

  1. class Animal {
  2. // default or no-arg constructor
  3. Animal() {
  4. System.out.println("I am an animal");
  5. }
  6. // parameterized constructor
  7. Animal(String type) {
  8. System.out.println("Type: "+type);
  9. }
  10. }
  11. class Dog extends Animal {
  12. // default constructor
  13. Dog() {
  14. // calling parameterized constructor of the superclass
  15. super("Animal");
  16. System.out.println("I am a dog");
  17. }
  18. }
  19. class Main {
  20. public static void main(String[] args) {
  21. Dog dog1 = new Dog();
  22. }
  23. }
Salida
Tipo: animal
soy un perro
El compilador puede llamar automáticamente al constructor sin argumentos. Sin embargo, no puede llamar a constructores parametrizados.
Si se debe llamar a un constructor parametrizado, debemos definirlo explícitamente en el constructor de la subclase.
Trabajo de super en caso de constructor parametrizado.
Tenga en cuenta que en el ejemplo anterior, llamamos explícitamente al constructor parametrizado super("Animal")El compilador no llama al constructor predeterminado de la superclase en este caso.

No hay comentarios.:

Publicar un comentario

Dejanos tu comentario para seguir mejorando!

Post Top Ad

Your Ad Spot

Páginas