[RESOLVIDO] Duvida sobre herança

Boa tarde pessoal, estou com uma dúvida sobre herança, tenho uma classe chamada Veiculo com todos os métodos abstrato

    public abstract  String getListarVerificacoes();
public abstract  String getAjustar();
public abstract  String getLimpar();

e duas subclasse automóvel e bicicleta, na classe automóvel eu adicionei um método getTrocarOleo, até ai tudo bem.

Na minha classe oficina tenho um método que recebe um Veiculo como parâmetro e realiza as tarefas

public void getManutencao(Veiculo veiculo) {
	veiculo.getListarVerificacoes();
	veiculo.getAjustar();
	veiculo.getLimpar();
}

mas fiquei com uma duvida, se o veiculo for um automóvel, ele deve fazer a troca de óleo.

sendo que meu método de troca de óleo esta na classe automóvel, eu travei nessa parte, se alguém poder ajudar agradeço.

É impossível você dizer que o Veículo pode fazer a troca de óleo, já que essa função está apenas atrelada ao Automóvel. Então, você pode fazer três coisas:

  • Aplicar polimorfismo (transformar o Veículo em Automóvel).

  • Criar dois métodos, um para o Automóvel e outro para a Bicicleta.

  • Aplicar a função de trocar óleo na classe Veículo e não na classe Automóvel
    Porém, todos as classes que herdarão de Veículo poderão ter essa função.

1 curtida

Bom te um conceito em progamação que polimorfismo quando você for instaciar a classe veiculo para o metodo você pode fazer assim: Veiculo v = new Automovel();
Por que veiculo é um automóvel.

Então fui ai que travei e não consegui mais avançar, porque na questão pede o seguinte

• manutencao(Veiculo v)que recebe como parâmetro um objeto do tipo veiculo e chama os métodos definidos na classe veiculo: • listarVerificacoes() • ajustar() • limpar() • se o veiculo for Automóvel deve também chamar o método mudarOleo() .

pensei que em fazer uma interface de veiculo, mas na classe oficina teria que ter um método de manutenção para automóvel e outro para bicicleta

então, mas ai que está o método de trocaOleo esta no automóvel, e parâmetro do método getManutencao é do tipo veiculo.

É exatamente isso;

Um veículo é um automóvel?
Acho que é o contrário, o Automóvel é que é um Veículo. :wink:

1 curtida

Claro que não.
Veja:

Automovel aut = new Automovel(); //Cria um objeto de Automovel que é um Veiculo
Oficina of = new Oficina(); //Cria a instância da oficina
of.getManutencao(aut); //Passa o automóvel como parâmetro do método getManutenção

E verifica o tipo com

if(veiculo instanceof Automovel) {
    ((Automovel) veiculo).getTrocarOleo();
}

Afinal, o instanceof, uma palavra reservada do java, tem essa finalidade.
Agora, se é realmente o ideal fazer uso dessa keyword, aí são outros five hundred.

Eu nunca ouvi falar dessa keyword kkkkkkk
Mas obrigado por compartilhar, até me ajudou a aprender também.
Vou procurar mais sobre ela e dizer se é uma boa prática de programação ou não

Sim já corrigi, escrevi errado;

Basicamente, é a keyword que permite identificar a qual tipo de classe uma variável pertence.
Porém, como tudo na vida, existe um (ou mais) porém:

 public class Foo{}

 public class Boo extends Foo{}

 Boo b = new Boo();

 if(b instanceof Foo) {
     System.out.println("É um Foo");
 }

 if(b instanceof Boo) {
     System.out.println("É um Boo");
 }

E ainda

 if(b instanceof Object) {
     System.out.println("É um Object");
 }

Ele passa em todos os ifs. Ou seja, precisa tomar muito cuidado com o uso deste validador

Obrigado pessoal pelas dicas, consegui resolver com instanceof, agora abriu mais minha mente para soluções futuras :heart:

1 curtida