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 extendminhas aulas?
Por exemplo, digamos que temos um Birdtipo. E seus subtipos são Eaglee Humming Bird. Agora, ambos os subtipos têm algum comportamento comum como o Bird. Mas Eagletambém tem um bom comportamento predatório (que não está presente no Birdtipo geral ), que eu quero usar . Portanto, agora não poderei fazer isso:
Bird bird = new Eagle();
Então, Eagleesse 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 Cartem comportamento adicional como ChangeGear, viola o LSP. Então, como estendemos uma classe, sem violar o LSP?