Aí depende o tipo de estrutura que você está planejando trabalhar.
Sabe a história do é um e do tem um? Então, é em situações assim que essa história faz mais sentido.
Vejamos.
Se você estender Professor de pessoa, logo, todo objeto de Professor, será, também, filho de Pessoa.
Uma pessoa, sabe-se, pode ser várias “coisas” diferentes, pode ser aluno, professor, músico, médico, engenheiro e político, sem que um interfira no outro.
No teu caso, em específico, eu faria uso da composição, tanto para a classe Professor, quanto para a aluno.
Explico.
É possível controlar instâncias de objetos, utilizando o pattern singleton, logo, você pode controlar quantos objetos de Pessoa existem na execução do teu programa.
Assim sendo, se existe uma pessoa, que é um atributo de um objeto da classe Professor, você consegue identificar e então, fazer com que esta pessoa seja associada ao objeto de Aluno, ao qual ele se refere.
Como assim?
Como professor e aluno, ambos, possuirão um atributo pessoa, objeto da classe Pessoa, uma simples análise no hashset deste já resolve.