Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Industrial programming >> Java

Java súper

Súper Java

En este tutorial, aprenderemos sobre la palabra clave super en Java con la ayuda de ejemplos.

El super La palabra clave en Java se usa en las subclases para acceder a los miembros de la superclase (atributos, constructores y métodos).

Antes de aprender sobre el super palabra clave, asegúrese de conocer la herencia de Java.


Usos de la palabra clave super

  1. Para llamar a métodos de la superclase anulada 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 sin argumentos (predeterminado) o al constructor parametrizado desde el constructor de la subclase.

Comprendamos cada uno de estos usos.


1. Acceder a métodos anulados de la superclase

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

Ejemplo 1:anulación de método

class Animal {

  // overridden method
  public void display(){
    System.out.println("I am an animal");
  }
}

class Dog extends Animal {

  // overriding method
  @Override
  public void display(){
    System.out.println("I am a dog");
  }

  public void printMessage(){
    display();
  }
}

class Main {
  public static void main(String[] args) {
    Dog dog1 = new Dog();
    dog1.printMessage();
  }
}

Salida

I am a dog

En este ejemplo, al hacer un objeto dog1 de Perro class, podemos llamar a su método printMessage() que luego ejecuta el display() declaración.

Desde display() está definido en ambas clases, el método de la subclase Dog anula el método de la superclase Animal . Por lo tanto, el display() de la subclase se llama.

¿Qué sucede 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:super para llamar al método de superclase

class Animal {

  // overridden method
  public void display(){
    System.out.println("I am an animal");
  }
}

class Dog extends Animal {

  // overriding method
  @Override
  public void display(){
    System.out.println("I am a dog");
  }

  public void printMessage(){

    // this calls overriding method
    display();

    // this calls overridden method
    super.display();
  }
}

class Main {
  public static void main(String[] args) {
    Dog dog1 = new Dog();
    dog1.printMessage();
  }
}

Salida

I am a dog
I am an animal

Aquí, cómo funciona el programa anterior.


2. Atributos de acceso de la superclase

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

Ejemplo 3:Acceso al atributo de superclase

class Animal {
  protected String type="animal";
}

class Dog extends Animal {
  public String type="mammal";

  public void printType() {
    System.out.println("I am a " + type);
    System.out.println("I am an " + super.type);
  }
}

class Main {
  public static void main(String[] args) {
    Dog dog1 = new Dog();
    dog1.printType();
  }
}

Salida :

I am a mammal
I am an animal

En este ejemplo, hemos definido el mismo campo de instancia tipo tanto en la superclase Animal y la subclase Perro .

Luego creamos un objeto dog1 del Perro clase. Luego, el printType() se llama al método usando este objeto.

Dentro del printType() función,

Por lo tanto, System.out.println("I am a " + type); imprime Soy un mamífero . Y, System.out.println("I am an " + super.type); imprime Soy un animal .


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

Como sabemos, cuando se crea un objeto de una clase, se llama automáticamente a su constructor predeterminado.

Para llamar explícitamente al constructor de la superclase desde el constructor de la subclase, usamos super() . Es una forma especial del super palabra clave.

super() solo se puede usar dentro del constructor de la subclase y debe ser la primera instrucción.

Ejemplo 4:Uso de super()

class Animal {

  // default or no-arg constructor of class Animal
  Animal() {
    System.out.println("I am an animal");
  }
}

class Dog extends Animal {

  // default or no-arg constructor of class Dog
  Dog() {

    // calling default constructor of the superclass
    super();

    System.out.println("I am a dog");
  }
}

class Main {
  public static void main(String[] args) {
    Dog dog1 = new Dog();
  }
}

Salida

I am an animal
I am a dog

Aquí, cuando un objeto dog1 de Perro se crea la clase, llama automáticamente al constructor predeterminado o sin argumentos de esa clase.

Dentro del constructor de la subclase, el super() instrucción llama al constructor de la superclase y ejecuta las instrucciones dentro de ella. Por lo tanto, obtenemos la salida Soy un animal .

Luego, el flujo del programa regresa al constructor de la subclase y ejecuta las instrucciones restantes. Así, soy un perro se imprimirá.

Sin embargo, usando 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()?

Es necesario si el constructor parametrizado (un constructor que toma argumentos) de la superclase debe llamarse desde el constructor de la subclase.

El super() parametrizado siempre debe ser la primera declaración en el cuerpo del constructor de la subclase, de lo contrario, obtenemos un error de compilación.

Ejemplo 5:llamar al constructor parametrizado usando super()

class Animal {

  // default or no-arg constructor
  Animal() {
    System.out.println("I am an animal");
  }

  // parameterized constructor
  Animal(String type) {
    System.out.println("Type: "+type);
  }
}

class Dog extends Animal {

  // default constructor
  Dog() {

    // calling parameterized constructor of the superclass
    super("Animal");

    System.out.println("I am a dog");
  }
}

class Main {
  public static void main(String[] args) {
    Dog dog1 = new Dog();
  }
}

Salida

Type: Animal
I am a dog

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.

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.


Java

  1. Operadores Java
  2. Comentarios Java
  3. Declaración if...else de Java
  4. Java para cada bucle
  5. Cadenas Java
  6. Interfaz Java
  7. Clase anónima de Java
  8. Prueba de Java con recursos
  9. Anotaciones Java
  10. Aserciones de Java
  11. Java Vector