logo

Súper palabra clave en Java

El súper La palabra clave en Java es una variable de referencia que se utiliza para hacer referencia al objeto de clase principal inmediato.

Cada vez que crea la instancia de la subclase, se crea implícitamente una instancia de la clase principal a la que hace referencia la variable de superreferencia.

Uso de la súper palabra clave de Java

  1. super se puede utilizar para hacer referencia a la variable de instancia de la clase principal inmediata.
  2. super se puede utilizar para invocar el método de clase principal inmediato.
  3. super() se puede utilizar para invocar el constructor de la clase principal inmediata.
Uso de la súper palabra clave de Java

1) super se utiliza para hacer referencia a la variable de instancia de la clase principal inmediata.

Podemos usar super palabra clave para acceder al miembro de datos o al campo de la clase principal. Se utiliza si la clase principal y la clase secundaria tienen los mismos campos.

matriz de retorno de Java
 class Animal{ String color='white'; } class Dog extends Animal{ String color='black'; void printColor(){ System.out.println(color);//prints color of Dog class System.out.println(super.color);//prints color of Animal class } } class TestSuper1{ public static void main(String args[]){ Dog d=new Dog(); d.printColor(); }} 
Pruébalo ahora

Producción:

 black white 

En el ejemplo anterior, ambas clases Animal y Perro tienen un color de propiedad común. Si imprimimos la propiedad de color, imprimirá el color de la clase actual de forma predeterminada. Para acceder a la propiedad principal, necesitamos usar la palabra clave super.

2) super se puede utilizar para invocar el método de la clase principal

La palabra clave super también se puede utilizar para invocar el método de la clase principal. Debe usarse si la subclase contiene el mismo método que la clase principal. En otras palabras, se utiliza si se anula el método.

 class Animal{ void eat(){System.out.println('eating...');} } class Dog extends Animal{ void eat(){System.out.println('eating bread...');} void bark(){System.out.println('barking...');} void work(){ super.eat(); bark(); } } class TestSuper2{ public static void main(String args[]){ Dog d=new Dog(); d.work(); }} 
Pruébalo ahora

Producción:

 eating... barking... 

En el ejemplo anterior, Animal y Dog, ambas clases tienen el método eat(), si llamamos al método eat() desde la clase Dog, llamará al método eat() de la clase Dog de forma predeterminada porque se le da prioridad al local.

Para llamar al método de la clase principal, necesitamos usar la palabra clave super.

3) super se usa para invocar el constructor de la clase principal.

La palabra clave super también se puede utilizar para invocar el constructor de la clase principal. Veamos un ejemplo sencillo:

 class Animal{ Animal(){System.out.println('animal is created');} } class Dog extends Animal{ Dog(){ super(); System.out.println('dog is created'); } } class TestSuper3{ public static void main(String args[]){ Dog d=new Dog(); }} 
Pruébalo ahora

Producción:

 animal is created dog is created 

Nota: el compilador agrega automáticamente super() en cada constructor de clase si no hay super() o this().

java es genial

Como bien sabemos, el compilador proporciona automáticamente el constructor predeterminado si no hay un constructor. Pero también agrega super() como primera declaración.

Otro ejemplo de palabra clave super donde el compilador proporciona super() de forma implícita.

 class Animal{ Animal(){System.out.println('animal is created');} } class Dog extends Animal{ Dog(){ System.out.println('dog is created'); } } class TestSuper4{ public static void main(String args[]){ Dog d=new Dog(); }} 
Pruébalo ahora

Producción:

 animal is created dog is created 

súper ejemplo: uso real

Veamos el uso real de la súper palabra clave. Aquí, la clase Emp hereda la clase Persona, por lo que todas las propiedades de Persona se heredarán a Emp de forma predeterminada. Para inicializar todas las propiedades, utilizamos el constructor de la clase principal de la clase secundaria. De esta forma, estamos reutilizando el constructor de la clase principal.

 class Person{ int id; String name; Person(int id,String name){ this.id=id; this.name=name; } } class Emp extends Person{ float salary; Emp(int id,String name,float salary){ super(id,name);//reusing parent constructor this.salary=salary; } void display(){System.out.println(id+' '+name+' '+salary);} } class TestSuper5{ public static void main(String[] args){ Emp e1=new Emp(1,'ankit',45000f); e1.display(); }} 
Pruébalo ahora

Producción:

 1 ankit 45000