Bom dia Pablo, não sei se entendi sua pergunta mas vamos lá!
Como é possível implementar uma classe na outra?
Bom, vamos entender a diferença entre extend
e implement
Extend
É como se fosse uma herança, a classe recebe todas as variáveis, funções,propriedades da classe extendida.
Implement
É como se fosse uma cópia ( famoso meme: copia mas não faz igual), onde a classe recebe todas as funções, mas apenas elas.
No caso do MOCK, usamos o extends
para fazer com que o MockContactDao
seja como um filho direto do Mock ( todas as funções e parametros são as mesmas) e em seguida usamos o implements
para copiar as funções do ContactDao
e fazer parecer que estamos usando ele normalmente ( mas só estamos fingindo)
Espero que tenha ficado claro c: