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
Veiculodeve ter um construtor que recebe a marca. - A classe
Carrodeve usarsuperpara 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
- Definimos a classe
Veiculocom o atributomarcae um construtor que o inicializa. - O método
exibirMarca()simplesmente imprime a marca. - A classe
CarroestendeVeiculousandoextends, herdando o atributomarcae o métodoexibirMarca(). - No construtor de
Carro, chamamossuper(marca)para repassar a marca ao construtor da superclasse. - O atributo
modeloé específico deCarroe não existe emVeiculo. - No
main, criamos umCarroe chamamosexibirMarca(), 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 deCarro: o compilador acusa que a superclasse não tem construtor padrão. - Declarar
marcacomoprivateemVeiculo: a subclasse não pode acessar diretamente; useprotectedou métodos de acesso. - Não usar
extends:Carronã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