Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Diferença entre Herança e Relacionamento

Boa tarde, herança e relacionamento quando devo usar um e não o outro?

1 resposta
solução!

Boa noite, Raphael! Como vai?

De modo geral, vc pode usar o seguinte critério para se guiar:

Sua classe precisa herdar comportamentos ou atributos predefinidos? Então utilize herança! Caso contrário utilize uma interface!

Exemplo Prático

Situação 1: Tenho uma classe ServicoHttp que sabe responder toda e qualquer requisição do protocolo HTTP. Mas eu preciso ter uma classe que também saiba se comportar desse jeito respondendo a todos os tipos de requisição HTTP, mas ao mesmo tempo preciso customizar a forma de atender o verbo GET desse protocolo!

Veja que a classe ServicoHttp já tem implementado dentro dela todos os atributos ( IP de quem está fazendo a requisição, por exemplo ) e todos os comportamentos ( formas de responder a todos os tipos de requisição HTTP ). Então tudo que eu preciso fazer na nova classe é herdar todos esses atributos e métodos, apenas sobrescrevendo o método que trata a requisição do tipo GET! Ficaria algo assim:

public class ServicoHttp {
     // declaração dos atributos omitida.

     public void executaGet(Requisicao req, Resposta resp) {
          // implementa a forma padrão de responder uma requisição do tipo GET.
     }

     // implementação padrão dos demais tipos de requisição HTTP.
}

public class CustomHttp extends ServicoHttp {

     @Override
     public void executaGet(Requisicao req, Resposta resp) {
          // implementa a forma customizada de responder uma requisição do tipo GET.
     }
}

Situação 2: Suponha agora que eu tenho uma classe ImpostoDeRenda e outra ImpostoSobreServico. Ambas as classes precisam implementar um método que recebe um valor qualquer e executam as suas respectivas lógicas de cálculo! Nesse caso eu usaria uma interface afinal de contas não desejo herdar nada de ninguém! E teríamos algo assim:

public interface Imposto {
     public double calcula(double valor);
}

public class ImpostoDeRenda implements Imposto {

     public double calcula(double valor) {
          // implementação da lógica do cálculo de IR.
     }
}

public class ImpostoSobreServico implements Imposto {

     public double calcula(double valor) {
          // implementação da lógica do cálculo de ISS.
     }
}

Pegou a ideia? Qualquer coisa é só falar!

Grande abraço e bons estudos, meu aluno!