Na minha busca por escrever um código melhor e mais limpo, estou aprendendo sobre os princípios do SOLID. Nisso, o LSP está se mostrando pouco difícil de entender adequadamente.
Minha dúvida é: se eu tiver alguns métodos extras no meu subtipo, S, que não existiam no tipo, T, isso sempre será uma violação do LSP? Se sim, então como faço para extend
minhas aulas?
Por exemplo, digamos que temos um Bird
tipo. E seus subtipos são Eagle
e Humming Bird
. Agora, ambos os subtipos têm algum comportamento comum como o Bird
. Mas Eagle
também tem um bom comportamento predatório (que não está presente no Bird
tipo geral ), que eu quero usar . Portanto, agora não poderei fazer isso:
Bird bird = new Eagle();
Então, Eagle
esse comportamento extra está quebrando o LSP?
Se sim, isso significa que não posso estender minhas classes porque isso causaria violação do LSP?
class Eagle extends Bird {
//we are extending Bird since Eagle has some extra behavior also
}
A extensão de classes deve ser permitida de acordo com o princípio Aberto / Fechado, certo?
Agradecemos antecipadamente por responder! Como você pode ver claramente, o LSP me confundiu como tudo.
Editar: Consulte esta resposta SO. Nisto novamente, quando Car
tem comportamento adicional como ChangeGear
, viola o LSP. Então, como estendemos uma classe, sem violar o LSP?