Da trilha de Java Este conceito ainda não saiu como card do dia. ir para o card de hoje

Java POO Básico

Herança

Herança é um mecanismo da POO que permite criar uma classe nova (subclasse) a partir de outra (superclasse), herdando seus atributos e métodos. Em Java, usamos a palavra-chave extends para estabelecer essa relação. A subclasse pode adicionar novos membros ou modificar o comportamento dos herdados.

Quando a subclasse precisa acessar o construtor ou métodos da superclasse, usamos super. Para sobrescrever um método, usamos a anotação @Override, que ajuda o compilador a verificar se realmente estamos sobrescrevendo corretamente. Se quisermos impedir que uma classe seja estendida ou que um método seja sobrescrito, usamos a palavra-chave final.

A herança promove reuso de código e criação de hierarquias, mas deve ser usada com moderação. Prefira composição sobre herança quando a relação não for claramente "é um".

Pontos-chave

  • extends cria uma subclasse que herda membros públicos e protegidos da superclasse.
  • super chama o construtor ou métodos da superclasse.
  • @Override indica que um método está sobrescrevendo um método da superclasse.
  • final em uma classe impede que ela seja estendida; em um método, impede sobrescrita.
ExemploHeranca.java
// Superclasse
class Animal {
    protected String nome;

    public Animal(String nome) {
        this.nome = nome;
    }

    public void emitirSom() {
        System.out.println(nome + " faz um som genérico.");
    }
}

// Subclasse que estende Animal
class Cachorro extends Animal {
    public Cachorro(String nome) {
        super(nome); // chama o construtor da superclasse
    }

    @Override
    public void emitirSom() {
        System.out.println(nome + " late: Au au!");
    }
}

// Classe final não pode ser estendida
final class Gato extends Animal {
    public Gato(String nome) {
        super(nome);
    }

    @Override
    public void emitirSom() {
        System.out.println(nome + " mia: Miau!");
    }
}

public class ExemploHeranca {
    public static void main(String[] args) {
        Animal a = new Animal("Bicho");
        Cachorro c = new Cachorro("Rex");
        Gato g = new Gato("Mimi");

        a.emitirSom();
        c.emitirSom();
        g.emitirSom();
    }
}

Exercícios

  1. 1
    Fácil

    Criando uma subclasse simples

    Crie uma classe Veiculo com o atributo marca e um método exibirMarca() que imprime a marca. Depois, crie a classe Carro que estende Veiculo e adiciona o atributo modelo. No main, instancie um Carro e chame exibirMarca().

    Resolver
  2. 2
    Médio

    Sobrescrita com @Override

    Crie uma classe Funcionario com atributos nome e salario, e um método calcularBonus() que retorna 10% do salário. Depois, crie a classe Gerente que estende Funcionario e sobrescreve calcularBonus() para retornar 20% do salário. No main, crie um Funcionario e um Gerente, e imprima o bônus de cada um.

    Resolver
  3. 3
    Desafio

    Herança com classe final e método final

    Crie uma classe ContaBancaria com atributos titular e saldo, e métodos depositar(double valor) e sacar(double valor). O método sacar deve ser final para impedir sobrescrita. Crie uma subclasse ContaPoupanca que estende ContaBancaria e adiciona o método renderJuros(double taxa). No main, crie uma ContaPoupanca, deposite, saque e renda juros, imprimindo o saldo final. Tente estender ContaPoupanca? Não, marque ContaPoupanca como final para impedir herança.

    Resolver

Continue estudando