Na resposta do exercício as mudanças de estado são feitas por $conta->estado = new Negativo(). Não é necessário utilizar $conta->setEstado() ?
Na resposta do exercício as mudanças de estado são feitas por $conta->estado = new Negativo(). Não é necessário utilizar $conta->setEstado() ?
Olá Carlos, tudo bom?
Se sua classe Conta e sua classe Estado estão no mesmo pacote, o atributo do tipo protected é compartilhado entre eles. Não necessitando, neste caso, do setter.
Quando trabalhamos com protected, dividimos nossos atributos ou métodos com quem herda e com quem está no mesmo pacote!
Mas, o modificador protected faz com que as classes filhas tenham acesso ao membro em questão, e não as do mesmo pacote. Tanto é que fiz um teste da forma que está no exercício e obtive um erro:
https://cursos.alura.com.br/forum/topico-recebo-um-erro-quando-tento-acessar-as-propriedades-de-conta-dentro-dos-estados-23153