Menu
Coddy logo textTech

A Palavra-chave super

Parte da seção Programação Orientada a Objetos do Journey de Java da Coddy. Lição 21 de 87.

A palavra-chave super fornece uma maneira para uma subclasse referenciar sua classe pai. É essencial quando você precisa acessar membros ou construtores da classe pai de dentro de uma classe filha.

O uso mais comum de super é chamar o construtor da classe pai. Esta deve ser a primeira instrução no construtor da subclasse:

public class Vehicle {
    private String brand;
    
    public Vehicle(String brand) {
        this.brand = brand;
    }
    
    public String getBrand() {
        return brand;
    }
}

public class Car extends Vehicle {
    private int doors;
    
    public Car(String brand, int doors) {
        super(brand);  // Deve ser a primeira linha
        this.doors = doors;
    }
}

Você também pode usar super para chamar métodos pai, o que é particularmente útil quando a subclasse tem um método com o mesmo nome:

public class Animal {
    public void makeSound() {
        System.out.println("Some sound");
    }
}

public class Cat extends Animal {
    public void makeSound() {
        super.makeSound();  // Chama a versão de Animal
        System.out.println("Meow!");
    }
}

Pense no super como o oposto do this. Enquanto o this se refere ao objeto atual, o super se refere à parte da classe pai desse objeto. Essa distinção torna-se crucial ao construir hierarquias de classes onde as classes filhas precisam estender, em vez de substituir completamente, o comportamento do pai.

challenge icon

Desafio

Fácil

Vamos criar um sistema de eletrodomésticos que demonstra como classes filhas podem usar super para chamar construtores da classe pai e estender o comportamento dos métodos da classe pai.

Você criará três arquivos para organizar seu código:

  • Appliance.java: Crie a classe pai que representa qualquer eletrodoméstico. Ela deve ter:
    • Um campo privado para a brand (String) do eletrodoméstico
    • Um campo privado para wattage (int)
    • Um construtor que aceite ambos os valores e os inicialize
    • Um método getBrand() que retorne a marca
    • Um método getWattage() que retorne a potência
    • Um método getInfo() que retorne: [brand] - [wattage]W
  • WashingMachine.java: Crie uma subclasse que estenda Appliance. Uma máquina de lavar tem tudo o que um eletrodoméstico tem, além de seus próprios recursos especiais:
    • Um campo privado para capacity (int), representando a capacidade de carga em kg
    • Um construtor que receba marca, potência e capacidade — use super(brand, wattage) para inicializar a parte referente à classe pai e, em seguida, defina a capacidade
    • Um método getCapacity() que retorne a capacidade
    • Um método getInfo() que chame o getInfo() da classe pai usando super.getInfo() e o estenda para retornar: [parent info], Capacity: [capacity]kg
  • Main.java: Crie uma WashingMachine e exiba suas informações completas. Você receberá três entradas: a marca (String), a potência (int) e a capacidade (int). Imprima o resultado da chamada de getInfo() em sua máquina de lavar.

Você receberá três entradas: nome da marca, potência e capacidade.

Observe como super tem duas finalidades aqui: chamar o construtor da classe pai para inicializar os campos herdados e chamar o método da classe pai para desenvolver seu comportamento, em vez de substituí-lo completamente.

Experimente você mesmo

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // Ler as entradas
        String brand = scanner.nextLine();
        int wattage = scanner.nextInt();
        int capacity = scanner.nextInt();
        
        // TODO: Criar um objeto WashingMachine com os valores de entrada
        
        // TODO: Imprimir o resultado da chamada de getInfo() na máquina de lavar
    }
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Programação Orientada a Objetos

Pratique por conta própria: Compilador de Java online