Olá, Leonardo, tudo bem?
O que tá acontecendo é que RequisicaoIncorreta
é uma subclasse de ErroBase
. Isso significa que RequisicaoIncorreta
é um tipo específico de ErroBase
. Então, quando você tem uma instância de RequisicaoIncorreta
, ela também é uma instância de ErroBase
.
No código, quando ocorre um erro, é criada uma nova instância de RequisicaoIncorreta
e passada para a função next(), isso faz com que o erro seja capturado pelo manipulador de erros.
Já nomanipulador de erros, ele verifica se o erro é uma instância de ErroBase
(e lembre-se, RequisicaoIncorreta
é um tipo de ErroBase
), então ele chama o método enviarResposta(res)
no erro. Como RequisicaoIncorreta
é uma subclasse de ErroBase
, ela herda todos os métodos de ErroBase
, mas também pode ter seus próprios métodos. Nesse caso, RequisicaoIncorreta
não tem seu próprio método enviarResposta(res)
, então ele usa o método da classe mãe, ErroBase
.
O que significa que, mesmo que estejamos capturando um ErroBase
, a mensagem do RequisicaoIncorreta
é enviada porque é uma instância de RequisicaoIncorreta
que está sendo passada para o manipulador de erros.
Espero que isso esclareça sua dúvida!
Um abraço e bons estudos.