Você pode ter atributos de classes que não são domains, mas você teria que marca-los como transientes para serem ignorados pelo mecanismo de persistencia. Ou se estiver usando hibernate, implementar um user type para isso.
Sem conhecer o seu cenario, uma outra possibilidade que me parece mais interessante seria tornar TipoPagamento um enum com as constantes CONTRATADO e TEMPORARIO, e um método calculaPagamento() na classe Professor.
Pense comigo, para o método calculaPagamento() funcionar provavelmente vai precisar de informações sobre o professor, ou me engano?
Neste caso, a chamada acabaria sendo algo como:
professor.tipoPagamento.calculaPagamento(professor)
Melhor seria:
professor.calculaPagamento()
Se o calculo for complexo você pode até jogar para outras classes como no código que vc postou, mas ainda assim mantendo encapsulado em Professor
Oi Leonardo,
não há problema algum em ter classes de domínio implementando interfaces.