logo

Super palavra-chave em Java

O super palavra-chave em Java é uma variável de referência usada para referir-se ao objeto de classe pai imediato.

Sempre que você cria a instância da subclasse, uma instância da classe pai é criada implicitamente, a qual é referida pela variável de superreferência.

Uso de super palavra-chave Java

  1. super pode ser usado para referir-se à variável de instância da classe pai imediata.
  2. super pode ser usado para invocar o método da classe pai imediato.
  3. super() pode ser usado para invocar o construtor da classe pai imediato.
Uso da palavra-chave Java Super

1) super é usado para referir-se à variável de instância da classe pai imediata.

Podemos usar a palavra-chave super para acessar o membro de dados ou campo da classe pai. É usado se a classe pai e a classe filha tiverem os mesmos campos.

lista vs conjunto em 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(); }} 
Teste agora

Saída:

 black white 

No exemplo acima, Animal e Dog, ambas as classes têm uma cor de propriedade comum. Se imprimirmos a propriedade color, ela imprimirá a cor da classe atual por padrão. Para acessar a propriedade pai, precisamos usar a palavra-chave super.

2) super pode ser usado para invocar o método da classe pai

A palavra-chave super também pode ser usada para invocar o método da classe pai. Deve ser usado se a subclasse contiver o mesmo método da classe pai. Em outras palavras, é usado se o método for substituído.

 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(); }} 
Teste agora

Saída:

 eating... barking... 

No exemplo acima, Animal e Dog, ambas as classes têm o método eat(), se chamarmos o método eat() da classe Dog, ele chamará o método eat() da classe Dog por padrão porque a prioridade é dada ao local.

Para chamar o método da classe pai, precisamos usar a palavra-chave super.

3) super é usado para invocar o construtor da classe pai.

A palavra-chave super também pode ser usada para invocar o construtor da classe pai. Vejamos um exemplo simples:

 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(); }} 
Teste agora

Saída:

 animal is created dog is created 

Nota: super() é adicionado em cada construtor de classe automaticamente pelo compilador se não houver super() ou this().

Java é ótimo

Como sabemos bem, o construtor padrão é fornecido automaticamente pelo compilador se não houver construtor. Mas também adiciona super() como a primeira instrução.

Outro exemplo de super palavra-chave onde super() é fornecido implicitamente pelo compilador.

 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(); }} 
Teste agora

Saída:

 animal is created dog is created 

super exemplo: uso real

Vamos ver o uso real da super palavra-chave. Aqui, a classe Emp herda a classe Person, então todas as propriedades de Person serão herdadas para Emp por padrão. Para inicializar todas as propriedades, estamos usando o construtor da classe pai da classe filha. Dessa forma, estamos reutilizando o construtor da classe pai.

 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(); }} 
Teste agora

Saída:

 1 ankit 45000