Dúvida na checagem da instância

Opa pessoal, blz?

Estou com uma dúvida em relação à sintaxe usada em um exercício que vi, abaixo o trecho do código:

if(p instanceof Professor)
            {
                String esp = JOptionPane.showInputDialog("Digite sua especialidade");
                String gra = JOptionPane.showInputDialog("Digite sua Titulação(Mestrado,Doutorado)");
               

                String mestrado= "mestrado";
                String doutorado= "doutorado";

                if(mestrado.equalsIgnoreCase(gra))
                    ((Professor)p).setvAula(15.0);
                else
                    if(mestrado.equalsIgnoreCase(gra))
                        ((Professor)p).setvAula(20.0);

                double vAu = ((Professor)p).getvAula();
                    
            ((Professor)p).setProfessor(esp, gra, vAu);
            }

o ((Professor)p) força a instância à ser uma instância da classe professor caso não seja, como funciona isso?

obrigado.

A idéia é essa, mas não diria com essas palavras, pesquise sobre “Cast” que é o nome da operação que está sendo feita!

Se a classe não for do tipo Professor, seu programa vai lançar uma ClassCastException.

Um cast não força nada a ser algo que não é. Você não pode fazer algo como (se estiver assistindo àquela coisa chamada BigBrother: )

Homem m = new Machao();
Gay g = (Gay) m;

Isso vai ocasionar um ClassCastException na segunda linha.

Excelente resposta entanglement!

blz, mas o que ele faz então?