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
- super pode ser usado para referir-se à variável de instância da classe pai imediata.
- super pode ser usado para invocar o método da classe pai imediato.
- super() pode ser usado para invocar o construtor da classe pai imediato.
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().
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