Olá, Giuli! Tudo bem?
Peço desculpa pela demora para responder o seu tópico.
Realmente é fácil se confundir com a necessidade ou não de utilizar o "require" nas suas classes filhas. Vou tentar explicar o motivo dessa diferença de comportamento.
Quando você utiliza o "require" em uma classe filha, está informando que essa classe depende da classe pai para funcionar corretamente. No caso da classe "Titular", ao utilizar o "require" para incluir a classe "Pessoa", você está garantindo que a classe "Titular" terá acesso aos métodos e propriedades da classe "Pessoa". Por isso, se você não incluir o "require" na classe "Titular", ocorre o erro informando que a classe "Pessoa" não foi encontrada.
Já na classe "Funcionario", ocorre o erro "Cannot declare class Pessoa, because the name is already in use" ocorre porque a classe "Pessoa" já foi declarada anteriormente, no seu caso para a classe "Titular". Isso acontece, provavelmente, você já incluiu a classe "Pessoa" em algum outro lugar do seu código antes de declarar a classe "Funcionario".
Em resumo, a necessidade de utilizar o "require" nas classes filhas, está relacionado a dependência dessas classes em relação à classe pai e também da ordem em que as classes são incluídas no código.
Espero ter ajudado a esclarecer a sua dúvida! Se tiver mais alguma pergunta, estou à disposição.
Grande abraço e bons estudos!
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.