Fácil Java

Criando uma subclasse simples

Enunciado

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().

Requisitos

  • A classe Veiculo deve ter um construtor que recebe a marca.
  • A classe Carro deve usar super para inicializar a marca.
  • O método exibirMarca() deve imprimir a marca do veículo.
  • O programa deve compilar e executar sem erros.

Código inicial

class Veiculo {
    // seu código aqui
}

class Carro extends Veiculo {
    // seu código aqui
}

public class Main {
    public static void main(String[] args) {
        // instancie e chame exibirMarca()
    }
}

Saída esperada

Marca: Toyota
Ver dica

Use super(marca) no construtor de Carro para passar a marca para Veiculo.

Mostrar solução
class Veiculo {
    protected String marca;

    public Veiculo(String marca) {
        this.marca = marca;
    }

    public void exibirMarca() {
        System.out.println("Marca: " + marca);
    }
}

class Carro extends Veiculo {
    private String modelo;

    public Carro(String marca, String modelo) {
        super(marca); // inicializa a marca na superclasse
        this.modelo = modelo;
    }
}

public class Main {
    public static void main(String[] args) {
        Carro carro = new Carro("Toyota", "Corolla");
        carro.exibirMarca();
    }
}

Passo a passo

  1. Definimos a classe Veiculo com o atributo marca e um construtor que o inicializa.
  2. O método exibirMarca() simplesmente imprime a marca.
  3. A classe Carro estende Veiculo usando extends, herdando o atributo marca e o método exibirMarca().
  4. No construtor de Carro, chamamos super(marca) para repassar a marca ao construtor da superclasse.
  5. O atributo modelo é específico de Carro e não existe em Veiculo.
  6. No main, criamos um Carro e chamamos exibirMarca(), que foi herdado.

Por que funciona

A herança permite que Carro reutilize o código de Veiculo. O método exibirMarca() está disponível em Carro porque foi herdado. O uso de super garante que a parte comum (marca) seja inicializada pela superclasse.

Erros comuns

  • Esquecer de chamar super(marca) no construtor de Carro: o compilador acusa que a superclasse não tem construtor padrão.
  • Declarar marca como private em Veiculo: a subclasse não pode acessar diretamente; use protected ou métodos de acesso.
  • Não usar extends: Carro não herdaria nada.

Outra forma de resolver

Poderia-se usar composição em vez de herança, mas para uma relação "é um" (Carro é um Veículo), herança é adequada.

Saída esperada

Marca: Toyota