A palavra-chave super é usada em diferentes situações. Antes de começar este post, encorajamos você a aprender sobre herança em Java para um melhor entendimento.
Qual é a palavra-chave super em Java?
Super é uma palavra-chave que pode ser usada para invocar métodos substituídos da superclasse, bem como para se referir a campos ocultos da superclasse.Por que e quando usar a palavra-chave super?
A palavra-chave super do Java tem três usos explícitos.- Acesse os membros de dados da classe pai quando a classe filha também tiver membros de dados com o mesmo nome.
- Chame os construtores padrão ou parametrizados da classe pai na classe filha.
- Chame os métodos da classe pai na classe filha se a filha tiver métodos substituídos.
Exemplo 1 - Acesse os membros de dados dos pais
O Exemplo 1 ilustra como os atributos ou membros de dados da classe Vehicle podem ser acessados na classe filha Car -type. Certifique-se de executar o trecho abaixo para entender bem.
class Vehicle {
String name = "vehicle";
}
class Car extends Vehicle {
String name = "car";
public void printMyName() {
System.out.println(name);
}
public void printParentName() {
// use super keyword to access
// parent's data member / attribute
System.out.println(super.name);
}
public static void main(String[] args) {
Car myCar = new Car();
System.out.print("My Car's Name: ");
myCar.printMyName();
// printing the parent's name
// using the super keyword
System.out.print("My Parent Vehicle's Name: ");
myCar.printParentName();
}
}
Saída
Nome do meu carro: car Nome do meu veículo principal: veículo
Exemplo 2 - Acesse os construtores dos pais na classe filha
Chamar super() explicitamente permite que você acesse o construtor padrão ou parametrizado da classe pai na classe filha. Aqui está um exemplo do construtor parametrizado. O pai, ou seja, o construtor da classe Shape , é chamado (usando super() ) na classe filha, ou seja, Triangle , para definir os atributos. Execute o programa abaixo para testar a saída você mesmo.
public class Shape {
String name;
public Shape(String n) {
System.out.println("Shape() parameterized constructor called!");
name = n;
}
}
class Triangle extends Shape {
int sides = 3;
String color;
public Triangle(String n, String c) {
// The super keyword calls the parameterized
// constructor of the parent (Shape) with
// 'n' as a parameter
super(n);
System.out.println("Triangle() parameterized constructor called!");
this.color = c;
}
public static void main(String[] args) {
Triangle myTriangle = new Triangle("Triangle Alpha", "Yellow");
System.out.println(myTriangle.name);
System.out.println(myTriangle.color);
}
}
Saída
Construtor parametrizado Shape() chamado! Construtor parametrizado Triangle() chamado! Triângulo Alfa Amarelo
Desafio rápido : redesenhe o programa acima usando o construtor padrão para testar seu aprendizado. Além disso, veja como super() é diferente de super(arg) .
Exemplo 3 - Acesse o método substituído do pai na classe filha
O exemplo 3 mostra como você pode acessar os métodos da classe pai que a classe filha também define. A classe pai Sound no programa abaixo define um método voice() . A classe filha Drum também possui um método com o mesmo nome, ou seja, voice() . Isso significa que a voz do método é substituída pela subclasse. Execute o programa abaixo para saber como a palavra-chave super é necessária para usar os métodos da classe pai na classe filha.
public class Sound {
public void voice() {
System.out.println("Play sound!");
}
}
class Drum extends Sound {
public void voice() {
System.out.println("Play drums!");
}
public void play() {
// The super keyword calls the
// voice() method of the parent
super.voice();
voice();
}
public static void main(String[] args) {
Drum myDrum = new Drum();
myDrum.play();
}
}
Saída
Construtor parametrizado Shape() chamado! Construtor parametrizado Triangle() chamado! Triângulo Alfa Amarelo
GO TO FULL VERSION