Olá, Luiz! Tudo ok contigo?
Na linha public boolean equals(C c), o método equals recebe como parâmetro um objeto da classe C. Ou seja, ele espera que você passe um objeto do tipo C para ser comparado com o objeto atual.
Na linha return c.x==x;, o método compara o valor da variável x do objeto passado como parâmetro (c.x) com o valor da variável x do objeto atual (x). Se os valores forem iguais, o método retorna true, indicando que os objetos são considerados iguais. Caso contrário, retorna false.
Na linha C b = new B();, a classe B é uma subclasse da classe C. Portanto, é possível criar um objeto do tipo B e atribuí-lo a uma variável do tipo C. Nesse caso, o objeto b é do tipo B, mas está sendo referenciado por uma variável do tipo C. Isso é possível porque B herda todos os membros de C.
Espero ter ajudado e bons estudos!